《Java》Java“字符串操作”实际应用——形成GBK编码和UTF-8编码的文本文件,通过其二进制数据观察两种编码的不同

一、任务目标

    完成一个java application应用程序,可以把GBK编码的汉字字符串与UTF-8编码的汉字字符串相互转换。并配合写文件操作形成不同编码格式的文本文件,可以通过其二进制数据观察两种编码的不同。

二、编程思路

    博主将“编程思路”以流程图的方式说明,如下图:

Created with Raphaël 2.2.0 开始 输入1或2,选择编码方式1:GBK 2:UTF-8 “coding()”函数中的switch()返回对应的编码方式,存入code中 code传入“writepi()”函数中限定getBytes()的编码方式 输入字符串,存入strs中 strs经过substring()截取成单个字符,存入str中 str传入“writepi()”函数中通过toBinaryString()转换为二进制数,存入result中 通过write()方法将result写入指定文件binary.txt中 结束

三、代码实现

文本文件(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别省略):

  1. GBK编码专门用来解决中文编码的,中文使用16位(即两个字节),英文使用8位(即一个字节)。
  2. UTF-8 编码是用以解决国际上字符的一种多字节编码,中文使用24位(三个字节),对英文使用8位(即一个字节)来编码。

猜你喜欢

转载自blog.csdn.net/yga_airspace/article/details/83154751