一个简单的编码的问题

behindme 2010-07-14 10:54:10
Eclipse中utf-8的类文件:
String str="<综艺娱乐>";
String fep=System.getProperty("file.encoding");//gbk2312
String defaultLnaguage = System.getProperty("user.language"); //zh
String utf_162=new String (str.getBytes("UTF-16LE"));
System.out.println("转为UTF-16LE2:"+utf_162);
String ori2=new String (utf_162.getBytes(),"UTF-16LE");
System.out.println("从UTF-16LE2转回来:"+ori2);//不正常
////////////////////////////////////////////////////////////////////////
String str="<海外电影>";
String utf_162=new String (str.getBytes("UTF-16LE"));
System.out.println("转为UTF-16LE2:"+utf_162);
String ori2=new String (utf_162.getBytes(),"UTF-16LE");
System.out.println("从UTF-16LE2转回来:"+ori2);//正常显示<综艺娱乐>


中文经过uft-16le编码后,有时可以编回来,有时不能编回来,是什么原因?
...全文
95 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ligoou 2010-07-14
  • 打赏
  • 举报
回复
引用http://blog.csdn.net/e5945/archive/2010/01/27/5262786.aspx

我这里写了一个例子,把字符串”我是好人”,以unicode编码写入到文本中,用InputStreamReader以”UTF-16LE”编码读取,输出的结果为:“???絙?”,而以“UTF-16BE”编码读取,结果则是“?我是好人”,文件大小显示为10字节。我的理解是,如果程序中指定使用unicode编码,但是没有指定字节顺序,程序会用java默认的UTF-16BE进行编码,并且,会输出标志位FEFF。所以文件中多了两个字节。而读取的时候,使用unicode编码读取,程序不知道使用的是哪一种字节顺序,先读取开头的FEFF,结果表明是采用的UTF-16BE编码,接下来再继续解析,就得到正确字符。而如果指定使用UTF-16LE编码,因为已经包含了字节顺序,所以就直接从字节数组中读取形成字符串,就出现了五个字符,而且由于编码格式不一样,除了‘好‘和‘絙’的编码刚好高低位倒置,还可以形成字符,其余全都是乱码。而使用UTF-16BE编码读取,因为已经制定了字节顺序,所以,也就不去读取标志位,那么就把unicode中无法编码的FEFF解码成为了‘?’。


z249683156 2010-07-14
  • 打赏
  • 举报
回复
等待知道中。。。。。。。。。。。
IOshopping 2010-07-14
  • 打赏
  • 举报
回复
是不是与文字相关哟,其他字都没问题的啊!

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧