2012-12-16 41 views
2

我的問題是,當我將西裏爾字母輸入掃描儀時,當我嘗試打印出來它變成gobbldygook(例如輸入ходить,輸出=Ö-æ-¥ - Π)。我有西裏爾字母的Ascii值以及存儲在文本文件中的UTF-8值。我非常確定System.in是錯誤的,那麼究竟該怎麼做?使用西里爾語言掃描儀對象在Java中可讀

Scanner s = new Scanner(System.in); 
String line = s.nextLine(); 
System.out.println(line); 
+0

你有沒有嘗試設置掃描儀的字符集?新的掃描器(System.in,「UTF-8」)?http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#Scanner(java.io.InputStream, java.lang.String) – kosa

+0

是的,不幸的是,它是相同的結果 – user1906927

+2

然後它是你的輸出設備。如果您正在打印到Windows終端,它將產生垃圾,除非您轉換回輸出正確的代碼頁。你的輸出看起來像你試圖打印UTF-8而沒有爲終端編碼。 –

回答

2

(我提前道歉,我的英語) 我有同樣的問題。我使用「eclipse」和文本文件編碼是UTF-8。當我從控制檯輸入西裏爾字母文本時,當我嘗試打印它時,輸出結果與您的類似。

Scanner input = new Scanner(System.in, "UTF-8"); 
     String word = input.nextLine(); 
     System.out.println(word); 

結果:

дума 
РґСѓРјР° 

這兩條線必須是相同的,但他們aren'n。

我的決心是:

Scanner input = new Scanner(System.in, "UTF-8"); 
     String word = input.nextLine(); 

     try { 
     word = new String(word.getBytes("windows-1251"), Charset.forName("UTF-8")); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     System.out.println(word); 

結果:

дума 
дума 

這是一個正確的結果。

對不起,但我的英語很差... 我希望我幫你。

+0

如果你開始使用'Scanner input = new Scanner(System.in,「windows-1251」);'? –

+0

我的解釋是「windows-1251」是輸入語言(西里爾語)的最佳編碼。當我們嘗試使用此編碼打印單詞時,結果不正確,因爲掃描器編碼和「eclipse」設置是針對「UTF-8」的。我們必須將文字轉換爲「日食」中設置的「UTF-8」,如文本文件編碼。如果我錯了,我很抱歉。 – dim

+0

如果我從Scanner input = new Scanner(System.in,「windows-1251」)開始;結果幾乎相同(不可思議的符號) – dim