2014-09-23 27 views
3

我的代碼(Qwe.java)Java程序不打印斯拉夫文字,但只有問號

public class Qwe { 
    public static void main(String[] args) { 
     System.out.println("тест привет"); 
    } 
} 

其中

тестпривет

是俄語單詞 QWE在我的機器(ubuntu 14.04)上UTF-8 上的.java結果是

тестпривет服務器上

(Ubuntu的12.04),我有:

???? ??????

$ java的QWE>的test.txt在test.txt的 是看

???? ??????

+0

我最好的猜測是,它不能中斷的話,並因此剛出來把垃圾。 – jgr208 2014-09-23 16:00:50

+0

System.out.println(「тест」);是相同的結果 - ???? – user1182583 2014-09-23 16:04:13

回答

0

我不確定,但它可能只接受來自英語的ASCII字符,除非你有一些擴展或什麼。但就像我說過的,我最好的猜測是它沒有找到人物,只是在他們的位置輸出垃圾。

「的Java,這是通過寫入傳遞()的OutputStream的方法得到印刷作爲一個純問號任何未知的字符‘?’」

here

0

Java源文本必須採取使用與javac編譯器相同的編碼。這似乎是這種情況,UTF-8當然是理想的。

文件Qwe.class很好,內部使用Unicode作爲String。輸出到控制檯使用服務器平臺編碼。也就是說,java將Unicode中的文本轉換爲可能使用默認(平臺)編碼的字節,並且不能處理西里爾文。

所以,你必須寫一個文件,從未使用的FileWriter(僅適用於本地文件的實用程序類),但使用:

... new OutputStreamWriter(new FileOutputStream(file), "UTF-8") 

您還可以設置用戶語言環境中的服務器上,但不是我的啤酒。

通常我會切換到文件記錄器。

+0

我的項目使用log4j的結果相同。我在我的日誌文件中看到:???? ??? ?? – user1182583 2014-09-23 16:22:10

+0

因爲它們是java的未知字符。你必須做更多的研究才能讓所有的uni-code字符在java中工作 – jgr208 2014-09-23 16:27:07

+0

@ user1182583在log4j中,必須將'encoding'參數設置爲UTF-8。請參閱http://rhythmcloud.blogspot。de/2009/10/set-character-encoding-to-log4js-file.html – 2014-09-23 16:28:56

1

我修復它只是利用出口JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8