2013-03-18 81 views
1

顯示爲問號,我正在嘗試從使用Java文件數據庫中的一些UTF-8 unicoded中國字。當我這樣做時,這些字符將作爲問號返回。中國漢字在Mac終端

然而,當我從數據庫中顯示的字符(使用select * from ...)字符被正常顯示。當我在由漢字組成的Java文件中打印字符串時,它們也會正常打印。

我在Eclipse這樣的問題:當我跑的程序,正在打印爲問號字符。但是,當我以UTF-8格式保存Java文件時,這個問題就解決了。

運行在終端「區域設置」目前返回此:

LANG="en_GB.UTF-8" 
LC_COLLATE="en_GB.UTF-8" 
LC_CTYPE="en_GB.UTF-8" 
LC_MESSAGES="en_GB.UTF-8" 
LC_MONETARY="en_GB.UTF-8" 
LC_NUMERIC="en_GB.UTF-8" 
LC_TIME="en_GB.UTF-8" 
LC_ALL= 

我也試圖編譯使用此我的Java文件:

javac -encoding UTF-8 [java file] 

但儘管如此,輸出爲問號。

這是很奇怪怎麼會只是有時顯示的字符。有沒有人對此有過解釋?或者甚至更好,如何解決這個問題,使字符正確顯示?

在此先感謝!

+0

的文本從Java應用程序返回的是什麼編碼的? – deceze 2013-03-19 08:13:07

+0

@deceze如何將我檢查從Java應用程序編碼?我曾嘗試編譯文件使用:javac -encoding UTF-8 [java文件]但無濟於事。 – 201403540 2013-03-19 11:18:19

+0

不知道,我不是Java的傢伙。如果字符不能正確顯示,則意味着字符被解釋爲不同的編碼,而不是輸出,就這些了。例如,控制檯可能期望使用UTF-8,但實際上可能會接收UTF-16。 – deceze 2013-03-19 11:23:20

回答

3

System.out的PrintStream不爲UTF-8的打印流創建。你可以將其轉換爲一個這樣的:

import java.io.PrintStream; 
import java.io.UnsupportedEncodingException; 

public class JavaTest { 

    public static void main(String[] args) { 


     try{ 
      PrintStream out = new PrintStream(System.out, true, "UTF-8"); 

      out.println("Hello"); 
      out.println("施華洛世奇"); 
      out.println("World"); 
     } 
     catch(UnsupportedEncodingException UEE){ 

      //Yada yada yada 
     } 
    } 
} 

您還可以通過set the default encoding as per here

java -Dfile.encoding=UTF-8 -jar JavaTest.jar 
+0

謝謝!工作就像一種享受。如果可以的話,我會給你一個+1。 – 201403540 2013-03-20 18:14:00