Windows-1252编码 - 显示不正确的字符

4

我有一个使用Windows-1252编码的缓冲区。然而,当我创建一个新的具有适当编码的字符串时,往往会得到问号而不是预期结果,例如:

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

作为结果,系统应该显示带有"^"上方的"u"字符。但实际上它显示为"?"。有任何想法吗?

我将这段代码放入了使用Java 8的NetBeans 8单元测试中,它可以很好地显示带有抑扬符号的“u”。 - james.garriss
2个回答

1

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

我认为这里最可能的问题在于输出方面。具体来说,Java 可能认为您所在的区域设置的默认字符集是 ASCII 或不支持该代码点的其他字符集。

消除 Windows-1252 作为问题的原因的一种方法是使用 Unicode 转义编写等效字符串;例如:

    System.out.println("\u00fb");

1
经过更深入的调查,很明显问题出在控制台(Eclipse)中显示字符上,因为将字符串逐个转换为整数值后可以得到正确的值。此外,在调试并显示字符串变量的值时,“u”与“^”会被正确地显示。因此,问题肯定是出在控制台上,但如何解决呢? - user2707175
Java可以直接从命令行运行(不需要Eclipse),但是显示方面会遇到相同的问题。:( 令人惊讶的是,Windows-1250字符可以正确显示。我尝试更改cmd窗口使用的字体,但情况依然如此。如何解决这个问题? - user2707175
有所帮助的是“java -Dfile.encoding=cp1252 MyClassNameWithMain”,但这不是解决方案,因为我需要在控制台中显示完整的Unicode——两种不同的语言。 - user2707175
如果您的控制台支持UTF-8,您应该更改相关的系统设置,以强制控制台使用UTF-8。然后将Java默认编码设置为UTF-8。 - Stephen C
你应该看一下这个网址:http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html,名称可能会有所不同。 - Wienczny

1
我已经找到了这个。
菜单运行/运行配置/下一个Java应用程序和您自己的应用程序名称/选项卡常规/下一个编码设置为UTF-8。
从现在开始,1250和1252字符似乎都可以正常显示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接