2017-07-03 143 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),它將正確顯示。