我有一个在 Windows-1252 中编码的字符缓冲区。但是,当我创建一个具有适当编码的新字符串时,而不是预期的结果,我经常得到询问标记,例如。
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
结果,系统应该显示“u”字符,上面带有“^”。相反,它显示“?”。
任何想法?
我已经找到了这个。
菜单运行/运行配置/下一个 Java 应用程序和您自己的应用程序名称/选项卡 common/下一个编码设置为 UTF-8
而且从现在开始,windows 1250 和 1252 字符似乎都可以正常显示。
首先 Windows-1252是受支持的编码:
如果不是,你会得到一个UnsupportedEncodingException
in new String (...,"Windows-1252")
。(这就是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");