为什么’?’ 在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

这是 Joel Spolsky撰写的关于这个主题的精彩文章 。 它不会直接帮助您解决问题,但它可以帮助您了解正在发生的事情。 它还将向您展示情况的真实情况。

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

我将检查您正在使用的编码,并尝试确定您正在正确读取,存储或打印值。

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

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

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

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

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

您可以阅读有关库及其下载位置以及如何在具有堆栈跟踪过滤的开源Java库中使用它,Silent String解析Unicode转换器和版本比较请参阅“ 字符串Unicode转换器 ”一节