《Java》Java“字符串操作”实际应用——形成GBK编码和UTF-8编码的文本文件,通过其二进制数据观察两种编码的不同
一、任务目标
完成一个java application应用程序,可以把GBK编码的汉字字符串与UTF-8编码的汉字字符串相互转换。并配合写文件操作形成不同编码格式的文本文件,可以通过其二进制数据观察两种编码的不同。
二、编程思路
博主将“编程思路”以流程图的方式说明,如下图:
三、代码实现
文本文件(binary.txt):
程序代码:
import java.io.*; //导入IO流
import java.util.Scanner; //导入Scanner类
public class Sconvert { //创建类
/**
* @param args
* @return
* @throws IOException
*/
//"写二进制数"函数
public static void writebi(String str,String code){
String result = null;
File file = new File("F:/TCC/binary.txt");//创建文件对象
try{ //File类异常捕捉
FileWriter fw = new FileWriter(file,true);//创建FileWriter对象fw
BufferedWriter bufw = new BufferedWriter(fw);//创建BufferedWriter对象bufw
bufw.write("“"+str+"”"+"的"+"<"+code+">"+"二进制数:");//向binary.txt中写前缀
try{ //getBytes异常捕捉
//通过getBytes()方法,以指定的字符集(即编码方式)获取字符
byte[] byt = str.getBytes(code);
for(int k=0;k<byt.length;k++)
{
//通过toBinaryString()方法将字符转换为二进制数
result = Integer.toBinaryString(byt[k]&0xff);
bufw.write(result+" ");//将转换后二进制数写入binary.txt中
}
bufw.newLine();//写入空白行
bufw.newLine();
System.out.println("写入成功!");
}catch(UnsupportedEncodingException e){
System.out.println("不支持的字符集");
}
bufw.close();
}catch(Exception e1){
e1.printStackTrace();
}
}
//"编码方式选择"函数
public static String coding(){
String code = null;
System.out.println("请选择编码格式:"+"\n"+"1:GBK"+"\n"+"2:UTF-8");
Scanner scan = new Scanner(System.in);
switch(scan.nextInt()){
case 1:
code = "GBK";
break;
case 2:
code = "UTF-8";
break;
}
return code;
}
public static void main(String[] args){
String str = null;
String code = null;
int j = 0;
code = coding();//将"编码方式选择"函数放回的字符串存入code中
System.out.println("请输入内容:");
Scanner scan = new Scanner(System.in);
String strs = scan.next();
for(int i = 0;i<strs.length();i++)
{
str = strs.substring(j+i,i+1);//通过substring()方法取出字符串strs指定位置的字符
writebi(str,code);//调用“写二进制数”函数
}
}
}
运行结果:
四、GBK编码与UTF-8编码的区别
从上图分析可以看出(字母“A”首位的0别省略):
- GBK编码专门用来解决中文编码的,中文使用16位(即两个字节),英文使用8位(即一个字节)。
- UTF-8 编码是用以解决国际上字符的一种多字节编码,中文使用24位(三个字节),对英文使用8位(即一个字节)来编码。