在做Java解析win,ole复合文件时遇到的问题。
其中一个块是unicode编码的文本,按常规的方式读取数据后打印出来的总是乱码。后来测试发现在似乎保存在文件中的数据的unicode编码被反转了。
如字符"补":
在文件中的十六进制是: 65 88
而实际的编码应该是: 88 65为什么会这样设计呢?
java中有没有专门提供给操作unicode数据流的类?在vc中转换ansi转换unicode用MultiByteToWideChar ,unicode转ansi用WideCharToMultiByte
java中有没有对应的方法或类?本质的问题还是ansi互转unicode!
其中一个块是unicode编码的文本,按常规的方式读取数据后打印出来的总是乱码。后来测试发现在似乎保存在文件中的数据的unicode编码被反转了。
如字符"补":
在文件中的十六进制是: 65 88
而实际的编码应该是: 88 65为什么会这样设计呢?
java中有没有专门提供给操作unicode数据流的类?在vc中转换ansi转换unicode用MultiByteToWideChar ,unicode转ansi用WideCharToMultiByte
java中有没有对应的方法或类?本质的问题还是ansi互转unicode!
System.out.println(new String(xx,"ascii"));//gbk或其他。打印AX,不能转换成 补显然是不正确的~
如果文件中的十六进制和实际编码相反,那说明文件采用的是UTF-16LE编码格式(即Windows系统的默认Unicode编码格式)。楼主可以这么来做:
byte[] xx={65,88};//字符 ‘补’在文件中的编码
String s = new String(xx,"UTF-16LE");
System.out.println(s);
byte[] xx={(byte)0x65,(byte)0x88};
System.out.println(new String(xx,"UTF-16LE"));