我有一个缓冲区,其中包含以 Windows-1252 编码的字符。然而,当我使用适当的编码创建一个新的字符串时,我经常得到询问标记,而不是预期的结果,例如。
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
结果,系统应该显示“u”字符,其上方带有“^”。相反,它显示“?”。
任何想法?
首先是Windows-1252is支持的编码:
如果不是,你会得到一个UnsupportedEncodingException
in new String (...,"Windows-1252")
。 (这就是javadoc http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String%28byte%5B%5D,%20int,%20int,%20java.lang.String%29 says!)
Oracle Java 文档说 Windows-1252 位于“基本编码集”中 -http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html 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 http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,等等。
我认为这里最有可能的问题是在输出方面。具体来说,Java 可能认为您的语言环境的默认字符集是 ASCII 或不支持该代码点的字符集。
一种消除方法Windows-1252
as the cause问题的关键是使用 Unicode 转义来编写等效的字符串;例如
System.out.println("\u00fb");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)