我有一个使用Windows-1252编码的缓冲区。然而,当我创建一个新的具有适当编码的字符串时,往往会得到问号而不是预期结果,例如:
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
作为结果,系统应该显示带有"^"上方的"u"字符。但实际上它显示为"?"。有任何想法吗?
我有一个使用Windows-1252编码的缓冲区。然而,当我创建一个新的具有适当编码的字符串时,往往会得到问号而不是预期结果,例如:
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
首先,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等。
消除 Windows-1252
作为问题的原因的一种方法是使用 Unicode 转义编写等效字符串;例如:
System.out.println("\u00fb");