论坛首页 Java企业应用论坛

字符集与编码方式测试理解

浏览 2006 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-05   最后修改:2012-01-05
字符集跟编码方式是两个不同的概念,大体:字符集是文字的集合,编码方式是文字转换成具体二进制的规则

问题:
一个文件用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代码的编码格式来查看

  • 大小: 1.5 KB
   发表时间:2012-01-05  
哎,对不起语文老师,没看明白楼主说啥
0 请登录后投票
   发表时间:2012-01-10  
无语了
Java文件的编码方式你就随意吧,没关系的
0 请登录后投票
   发表时间:2012-01-10  
allenofchina 写道
无语了
Java文件的编码方式你就随意吧,没关系的


你测试过吗??
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics