字符集与编码方式测试理解
字符集跟编码方式是两个不同的概念,大体:字符集是文字的集合,编码方式是文字转换成具体二进制的规则
问题:
一个文件用GBK编码,写了中文字符集
那么UTF-8使用它的时候,需要注意什么
一个有意思的小测试
在src下面放置两个文件,原始的文件
back那个代码设置为utf-8编码 下面的java代码也utf-8编码,gbk-utf.txt那个文件设置为GBK编码,随便打点汉字
public class IOCharsetConvert {public static void main(String[] args) throws Exception {//为了方便测试,此处用绝对路径,好修改文件编码String path="D:\\springdemo1.0\\src\\main\\java\\";String fileNamePrimitive=path+"gbk-utf8.txt";List<String> list=read(fileNamePrimitive, "GBK");BackFile(path+"gbk-utf8-back.txt", list);}private static List<String> read(String fileName,String convertCharSet) throws Exception{BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),convertCharSet));List<String> sbuffer=new ArrayList<String>();String str=null;while((str=br.readLine()) != null){sbuffer.add(str);System.out.println("test-->>"+str);}br.close();return sbuffer;}public static void BackFile(String backFileName,List<String> strbuffer) throws IOException{BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(backFileName)));for(String str:strbuffer){bw.write(str);}bw.flush();bw.close();}}1.运行代码--查看对应的back文件,编码没有问题,汉字一切正常
2.back编码与java代码编码不一致,运行程序,查看效果,乱码
3.编码一致的时候哪怕都是gbk或者utf-8 一切正常
结论:
这些中文字符集跟GBK对应存放在底层的具体二级制形式,我们在UTF-8中使用这些二级制肯定不能对应出UTF-8对应的中文字符,那么我们用不上这个二级制,能用上的只有字符
我们的java文件时UTF-8编码的,那么GBK按照读入进来的字符,就是在UTF-8里面增加字符
最后输出是怎样的?把这些UTF-8表示的字符按照二级制输出到对应文件,这个文件底层当然是二级制表示的,所以必须以java代码的编码格式来查看