为什么'?'在java中打印unicode字符时显示为输出

时间:2013-09-26 20:44:28

标签: java unicode

在java中打印某些unicode字符时,输出为“?”。为什么会这样,有没有办法打印这些字符?

这是我的代码

String symbol1="\u200d";
        StringBuilder strg = new StringBuilder("unicodecharacter");
        strg.insert(5,symbol1);
        System.out.println("After insertion...");
        System.out.println(strg.toString());

输出是 插入后...... UNICO?decharacter

5 个答案:

答案 0 :(得分:3)

乔尔·斯波尔斯基(Joel Spolsky)撰写的关于这一主题的

Here's a great article。它不会直接帮助您解决问题,但它可以帮助您了解正在发生的事情。它还将向您展示情况的真实情况。

答案 1 :(得分:2)

您的字符编码与您拥有的字符或屏幕上支持的字符不匹配。

我会检查您正在使用的编码,并尝试确定您是正在正确地阅读,存储或打印该值。

答案 2 :(得分:0)

您确定需要哪种编码吗?如果您要处理欧洲字符,则可能需要将输出显式编码为UTF-8或ISO 8859-1。

答案 3 :(得分:0)

读取无效的unicode字符时,Java的默认行为是将其替换为替换字符(\ uFFFD)。此字符通常呈现为问号。

在您的情况下,您正在阅读的文本未编码为unicode,它被编码为其他内容(如果您的文本是英文,则Windows-1252或ISO-8859-1可能是最常见的替代方案)。

答案 4 :(得分:0)

我写了一个开源库,它有一个实用程序可以将任何String转换为Unicode序列,反之亦然。它有助于诊断此类问题。因此,例如要打印您的String,您可以使用以下内容:

String str= StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString("\\u0197" +
   StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Test"));

您可以在Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison阅读有关库及其下载位置以及如何使用它的信息,请参阅“字符串Unicode转换器”段落