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编码后,有时可以编回来,有时不能编回来,是什么原因?

解决方案 »

  1.   

    引用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解码成为了‘?’。