我有一个用Windows-1252编码的字符的缓冲区。但是,当我使用适当的编码创建新的String时,而不是预期的结果时,我经常会收到询问标记。

byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));

结果,系统应在其上方显示“u”字符和“^”。而是显示“?”。

任何想法?

最佳答案

首先,Windows-1252是受支持的编码:

  • 如果不是,则会在UnsupportedEncodingException中得到一个new String (...,"Windows-1252")。 (这就是javadoc所说的!)
  • Oracle Java文档中说Windows-1252位于“基本编码集”中-http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.htmlhttp://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html等。

  • 我认为这里最可能出现的问题是在输出端。具体来说,Java可能会认为您的语言环境的默认字符集是ASCII或不支持该代码点的字符集。

    消除Windows-1252引起问题的一种方法是使用Unicode转义来编写等效的字符串。例如
        System.out.println("\u00fb");
    

    10-04 10:12