2017-07-03 144 views
2

显示在java中显示unicode字符 “?”标志。例如,我试图打印“अ”。其unicode号是U + 0905和HTML表示为 “अ”。 以下代码打印“?”而不是unicode字符。打印Unicode字符

char aa = '\u0905'; 
String myString = aa + " result" ; 
System.out.println(myString); // displays "? result" 

有不使用unicode人数从unicode本身直接显示unicode字符的方法吗?即“保存在文件中”,现在将文件显示在jsp中。

+7

可能是你的** **控制台无法或配置为显示字符? – sazzad

+1

@sazzad我已经在servlet get方法中试过了。这里还显示“?”在浏览器中。 – Redone

+0

是您的请求返回utf8? –

回答

2

尝试使用UTF8字符集 -

 Charset utf8 = Charset.forName("UTF-8"); 
     Charset def = Charset.defaultCharset(); 

     String charToPrint = "u0905"; 

     byte[] bytes = charToPrint.getBytes("UTF-8"); 
     String message = new String(bytes , def.name()); 

     PrintStream printStream = new PrintStream(System.out, true, utf8.name()); 
     printStream.println(message); // should print your character 
0

myString变量包含完全正确的值。问题必须是System.out.println(myString)的输出,它必须向某些输出发送一些字节以显示您要查看的字形。

System.out是使用“平台默认的编码”将字符转换为字节序列一个PrintStream - 也许你的平台不支持该字符。例如。在德国的Windows 7计算机上,默认编码是CP1252,并且在此编码中没有与您的角色对应的字节序列。

或许编码是正确的,但仅仅是从角色创建图形字形字体不具有系统字符。

如果您发送您的输出到Windows CMD.EXE的窗口,那么也许这两个原因适用。

但是请放心,您的字符串是正确的,如果您将它发送到可以处理它的目标(例如Swing JTextField),它将正确显示。