在做Java解析win,ole复合文件时遇到的问题。
其中一个块是unicode编码的文本,按常规的方式读取数据后打印出来的总是乱码。后来测试发现在似乎保存在文件中的数据的unicode编码被反转了。
如字符"补":
在文件中的十六进制是: 65 88
而实际的编码应该是: 88 65为什么会这样设计呢?
java中有没有专门提供给操作unicode数据流的类?在vc中转换ansi转换unicode用MultiByteToWideChar ,unicode转ansi用WideCharToMultiByte
java中有没有对应的方法或类?本质的问题还是ansi互转unicode!

解决方案 »

  1.   

    你试试这个----》new String("你的字符串".getBytes("你的字符串编码"),你想转换成的编码)
      

  2.   

    如过按#1楼的这种方法。byte[] xx={88,65};//字符 ‘补’ 的unicode编码
    System.out.println(new String(xx,"ascii"));//gbk或其他。打印AX,不能转换成 补显然是不正确的~
      

  3.   

    new String("你的字符串".getBytes("你的字符串编码"),你想转换成的编码)
      

  4.   


    如果文件中的十六进制和实际编码相反,那说明文件采用的是UTF-16LE编码格式(即Windows系统的默认Unicode编码格式)。楼主可以这么来做:
    byte[] xx={65,88};//字符 ‘补’在文件中的编码
    String s = new String(xx,"UTF-16LE");
    System.out.println(s);
      

  5.   

    编码高位在前低位在前的问题!byte[] xx={65,88}这是10进制的。
     byte[] xx={(byte)0x65,(byte)0x88};
     System.out.println(new String(xx,"UTF-16LE"));