锁定老帖子 主题:对编码问题的总结(java版)
精华帖 (0) :: 良好帖 (7) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-09
最后修改:2010-11-09
javajeye 写道 marauder 写道 javajeye 写道 还有一个问题 文本的格式是utf-8或gbk经过正确的编码解析后对应的unicode(255 254 222...)是怎么得到的? unicode(255 254 222...)这个在内存里,我也看不到的。 那么怎么可以说上面两张图中内存的unicode是一样的呢? 怎么说呢,有点不太明白你的意思。 用首先确定下字符在jvm中是unicode编码的,这个不是试出来的,是看文档资料说的。这个我敢确定是准确的。(我也不知道怎么去验证咧,拆出来看下呵,有知道怎么拆的告诉下 ) getByte("unicode")出来就直接拿出unicode的编码。那么java他里面是什么,这就是什么咯。 |
|
返回顶楼 | |
发表时间:2010-11-09
如果保存文本为gbk,也用了gbk编码解析成jvm中的unicode,那么在输出(print输出到控制台)时,平台默认字符集为utf-8,
这时输出的汉字是正确的,也没有乱码。不知道为什么呢? |
|
返回顶楼 | |
发表时间:2010-11-10
javajeye 写道 如果保存文本为gbk,也用了gbk编码解析成jvm中的unicode,那么在输出(print输出到控制台)时,平台默认字符集为utf-8,
这时输出的汉字是正确的,也没有乱码。不知道为什么呢? 你怎么设置的平台默认字符编码为utf-8?解说下先 还有一点要提醒你下,utf-8是unicode下的编码,正确来说他不是字符集 |
|
返回顶楼 | |
发表时间:2010-11-11
可能我没说清楚:
设置平台缺省的编码方式为utf-8,在eclipse中右击工程点properties--resource--text file encoding other设置utf-8. System.out.println(System.getProperty("file.encoding")); 这个就可以显示出来 还是上次的问题 1.文本是gbk保存,用了gbk编码解析成jvm中的unicode 2.还是用你的程序,输出时,汉字没有乱码,这是为什么呢????? |
|
返回顶楼 | |
发表时间:2010-11-12
最后修改:2010-11-12
javajeye 写道
可能我没说清楚:
设置平台缺省的编码方式为utf-8,在eclipse中右击工程点properties--resource--text file encoding other设置utf-8. System.out.println(System.getProperty("file.encoding")); 这个就可以显示出来 还是上次的问题 1.文本是gbk保存,用了gbk编码解析成jvm中的unicode 2.还是用你的程序,输出时,汉字没有乱码,这是为什么呢?????
先看下上面这张图片吧,你所说的properties--resource--text file encoding other设置utf-8其实是设置了图片左下角那个,就是你把java源代码(java文件)设置成utf-8,这个是很外部的,你运行的时候他会自动识别编译为utf-8的class文件,之后操作都没影响到,所以根本没影响到jvm他后面的一些转换 |
|
返回顶楼 | |
发表时间:2010-11-12
最后修改:2010-11-12
marauder 写道
javajeye 写道
可能我没说清楚:
设置平台缺省的编码方式为utf-8,在eclipse中右击工程点properties--resource--text file encoding other设置utf-8. System.out.println(System.getProperty("file.encoding")); 这个就可以显示出来 还是上次的问题 1.文本是gbk保存,用了gbk编码解析成jvm中的unicode 2.还是用你的程序,输出时,汉字没有乱码,这是为什么呢?????
先看下上面这张图片吧,你所说的properties--resource--text file encoding other设置utf-8其实是设置了图片左下角那个,就是你把java源代码(java文件)设置成utf-8,这个是很外部的,你运行的时候他会自动识别编译为utf-8的class文件,之后操作都没影响到,所以根本没影响到jvm他后面的一些转换
既然你说这个设置没影响到jvm后面的一些转换,就可以说输出到控制台中的信息是经过os缺省的gbk来解析. 那么还是按我说的设置text file encoding: utf-8,外部文件是utf-8保存,这样转换后的汉字是没有乱码的。而把text file encoding :gbk就是有问题的. 这和你说的没影响是有矛盾的
|
|
返回顶楼 | |
发表时间:2010-11-13
javajeye 写道
既然你说这个设置没影响到jvm后面的一些转换,就可以说输出到控制台中的信息是经过os缺省的gbk来解析. 那么还是按我说的设置text file encoding: utf-8,外部文件是utf-8保存,这样转换后的汉字是没有乱码的。而把text file encoding :gbk就是有问题的. 这和你说的没影响是有矛盾的
|
|
返回顶楼 | |
发表时间:2010-11-13
marauder 写道 javajeye 写道 第二部分输出结果中 UTF-8:?连通 有个?,就是乱码,是什么原因呢??? 就是一开始保存文本为UTF-8 的时候他字节就为17 -69 -65 (标记) -24-65 -98 -23 (连)-128 -102 (通),前面三个是UTF-8的标记,就是让机器扫描后能知道他是个UTF-8的文本,好让机器自动识别,将上面9个字节用UTF-8解析放在存在JVM的unicode编码前面就多出两个字节出来,如果再用UTF-8去解析就不会错,因为UTF-8认到标示不会显示的,但是print输出到控制台的时候,他依旧是用默认的"GBK",前面“17 -69 -65 (标记)”这个对“GBK”的编码来说是多余的,所以输出了个?号,然后剩下的才是“连通” 这就是设置成gbk后的结果,多个? |
|
返回顶楼 | |
发表时间:2010-11-13
javajeye 写道
这就是设置成gbk后的结果,多个?
晕死,原来一开始就没理解好你的意思。 我说的没影响到是应为在这里 isrGBK = new InputStreamReader(fis02, "GBK"); (都定死了读取的编码) isrUTF8 = new InputStreamReader(fis01, "UTF-8"); 把自己从文本里拿出来后,强制用自己编码转换了,所以各自用各自的编码解析为unicode存到内存里,那么文本是什么编码的,对应的编码解析就能正确解析到内存里。 我意思是说,读的进内存的时侯跟写出的时候是隔开的,那么一旦内存里的编码是正确的,你再用什么编码去解都可以。只要不超出对应的字符集。
那就从内存里看,255 254 222 143 26 144这个正确的嘛,但本来就多两个字节255 254对应的就是多出来的标识字节,对这两个字节用gbk去转换就得到个问号,用utg-8解出来255 254就是什么都没有。 |
|
返回顶楼 | |
发表时间:2010-11-13
一开是就误解你意思。。
以为你说的是能正确显示是能输出了:联通了二字 原来你说的正确显示是没了个?号。。 |
|
返回顶楼 | |