在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
答案 0 :(得分:3)
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转换器”段落