论坛首页 Java企业应用论坛

对编码问题的总结(java版)

浏览 19217 次
精华帖 (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他里面是什么,这就是什么咯。
0 请登录后投票
   发表时间:2010-11-09  
如果保存文本为gbk,也用了gbk编码解析成jvm中的unicode,那么在输出(print输出到控制台)时,平台默认字符集为utf-8,
这时输出的汉字是正确的,也没有乱码。不知道为什么呢?
0 请登录后投票
   发表时间:2010-11-10  
javajeye 写道
如果保存文本为gbk,也用了gbk编码解析成jvm中的unicode,那么在输出(print输出到控制台)时,平台默认字符集为utf-8,
这时输出的汉字是正确的,也没有乱码。不知道为什么呢?

你怎么设置的平台默认字符编码为utf-8?解说下先
还有一点要提醒你下,utf-8是unicode下的编码,正确来说他不是字符集
0 请登录后投票
   发表时间: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.还是用你的程序,输出时,汉字没有乱码,这是为什么呢?????
0 请登录后投票
   发表时间: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他后面的一些转换

0 请登录后投票
   发表时间: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就是有问题的.

这和你说的没影响是有矛盾的

 

 

0 请登录后投票
   发表时间:2010-11-13  
javajeye 写道

既然你说这个设置没影响到jvm后面的一些转换,就可以说输出到控制台中的信息是经过os缺省的gbk来解析.

那么还是按我说的设置text file encoding: utf-8,外部文件是utf-8保存,这样转换后的汉字是没有乱码的。而把text file encoding :gbk就是有问题的.

这和你说的没影响是有矛盾的

 

 


能说说下text file encoding :gbk后哪里出现问题了?贴张图片来看看

0 请登录后投票
   发表时间: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后的结果,多个?
0 请登录后投票
   发表时间: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就是什么都没有。

0 请登录后投票
   发表时间:2010-11-13  
一开是就误解你意思。。
以为你说的是能正确显示是能输出了:联通了二字
原来你说的正确显示是没了个?号。。 
0 请登录后投票
论坛首页 Java企业应用版

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