我有一个缓冲区,其中包含以 Windows-1252 编码的字符。但是,当我创建一个具有适当编码的新字符串时,我经常得到询问标记而不是预期结果,例如。
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
因此系统应该显示“u”字符,上面有“^”。而是显示“?”。
有什么想法吗?
最佳答案
首先,Windows-1252 是一种受支持的编码:
如果不是,您将在
new String (...,"Windows-1252")
中得到一个UnsupportedEncodingException
。 (这就是 javadoc 所说的!)Oracle Java 文档说 Windows-1252 在“基本编码集”中 - http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html , http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html等等。
我认为这里最有可能出现问题的是输出端。具体来说,Java 可能认为您的语言环境的默认字符集是 ASCII 或不支持该代码点的内容。
消除 Windows-1252
作为问题的原因 的一种方法是使用 Unicode 转义编写等效的字符串;例如
System.out.println("\u00fb");
关于java - Windows-1252 编码 - 显示不正确的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18424354/