2011-02-03 224 views
4

我想記錄一些俄文本:谷歌App Engine的編碼

LOG.info("тестирование русского"); 

,但我得到的問題,而不是符號(從Web上查看):

[APP-ID /應用程序版本]: 15:18:44,753 INFO [class] - ???????????? ????????

用UTF-8編碼保存的Java文件。所有設置都是默認設置

即使我用俄語字符讀取UTF-8文件並嘗試從中記錄某些內容 - 編碼也是錯誤的。

+0

您是否嘗試將文本作爲unicode類型的字符串發送? – 2011-06-02 16:15:10

+0

很高興知道GAE(顯然是ASCII)上的默認`Charset`,我相信*是修改後的Jetty實例,它們運行在自己的風格或Linux上。 – IAmYourFaja 2013-02-26 21:04:16

回答

3

我和希伯來文有類似的問題。我發現它是由默認編碼引起的。

要檢查的默認編碼,我用這個代碼:

OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream()); 
String encoding = out.getEncoding(); 

在我的電腦中,編碼是「UTF-8」。在GAE服務器上,它是「ASCII」。

我用替換所有的文件,讀者在我的代碼解決了這個問題:

new InputStreamReader(new FileInputStream(file), "UTF8")); 

此通知Java忽略的默認編碼,並打開所有的輸入文件爲UTF8。

1

試試這個。顯然,GAE試圖自動檢測編碼並失敗。 即使是不斷的字符串被搞砸了

public class Util { 
    public static String FixRussianString(String string){ 
     try { 
      return new String(string.getBytes("CP1251"), "UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     return string; 
    } 
}