2012-03-30 42 views
2

我颳了幾個網站,其中一些網站包含非拉丁字符和特殊字符,如,而不是",而不是'爲什麼此BufferedReader未以指定的UTF-8格式讀取?

這裏是真正的弧線球...

我打印到控制檯的相關文字。當我在我的IDE(Netbeans)中運行它時,一切都很好編碼。但是,當我在我的電腦上運行它「I Need Your Help」被打印出來:ΓÇ£I Need Your HelpΓÇ¥ ...

之前有人說我需要設置我的JAVA_TOOL_OPTIONS環境變量以-Dfile.encoding=UTF8讓我說,我已經做到了,這仍是一個問題。此外,不應該指定緩衝讀取器的編碼爲"UTF-8"重寫嗎?

這裏的一些信息:

  • 我使用的是JDK 7的目標平臺爲1.7
  • 我在Windows 7機器上運行的所有的機器,我上運行這一點,遇到同樣的問題(有些沒有設置JAVA_TOOL_OPTIONS,但這似乎沒有任何區別)。
  • 我認爲這是使用默認的編碼爲CP1252,...

這裏是我的代碼。讓我知道你是否需要更多信息。謝謝!

/** 
* Using the given url, this method creates and returns the buffered reader for that url 
* 
* @param urlString 
* @return 
* @throws MalformedURLException 
* @throws IOException 
*/ 
public synchronized static BufferedReader getBufferedReader(String urlString) throws MalformedURLException, IOException { 
    URL url = new URL(urlString); 
    InputStream is = url.openStream(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
    return br; 
} 
+0

我有一個問題,即調用java程序從玉簪直接:JAVA myprogram工作,但是當我試圖遠程運行的ssh我@玉簪的「java myprogram」沒有奏效。它正在讀取一個utf8輸入文件。當我添加-Dfile.encoding = utf8它工作!該片段的Thx – Paul 2014-07-28 15:57:15

回答

2

這裏有兩種可能性。正如user1291492所說,這可能是因爲您正確地閱讀了內容,但終端使用的編碼與IDE使用的編碼不同。

另一種可能性是源數據不是UTF-8。如果您正在搜索某個網站,那麼您應該注意網站通過Content-Type標題告訴您它正在使用的編碼,而不是假設它始終是UTF-8。

+0

謝謝,這是控制檯問題......我有點尷尬...... – kentcdodds 2012-03-30 16:54:44

1

IDE的輸出「窗口」可能具有理解和打印utf-8字符的能力。控制檯可能不那麼先進

+0

簡直不敢相信。就是這樣。對不起,我一直有這麼多問題,我想我已經試過了。謝謝! – kentcdodds 2012-03-30 16:53:52

+1

@kentcdodds通過針眼來驅動駱駝比使用微軟專有的所謂操作系統與UTF-8更好地播放更加容易,鑑於UTF-8現在是主流文本編碼,所以特別讓人惱火僅僅是Unicode而不是全球網絡上的所有文本。 – tchrist 2012-03-31 16:02:21

0
try { 
     reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); 
    } catch (UnsupportedEncodingException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
     String line=""; 
     String s =""; 
    try 
    { 
     line = reader.readLine(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
     while (line != null) 
     { 
     s = s + line; 
     s =s+"\n"; 
     try 
     { 
      line = reader.readLine(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    tv.setText(""+s); 
    } 
相關問題