我有一个带有在Windows-1252中编码的字符的缓冲区。但是,当我使用适当的编码创建一个新的String,而不是预期的结果时,我经常会遇到询问标记,例如
byte[] tmps = new byte[] {(byte) 0xfb};
System.out.println (new String (tmps,0,1,"Windows-1252" ));
结果系统应显示“u”字符,其上方带有“^”。而是显示“?”。
有什么想法吗?
答案 0 :(得分:1)
首先,Windows-1252 是支持的编码:
如果不是,您会在UnsupportedEncodingException
中获得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转义编写等效字符串; e.g。
System.out.println("\u00fb");
答案 1 :(得分:1)
我已经找到了这个。
菜单运行/运行配置/下一个Java应用程序和您自己的应用程序名称/选项卡常用/下一个编码设置为UTF-8
从现在开始,Windows 1250和1252个字符似乎都显示正常。