2011-02-11 61 views
2

我有一個文本文件,中文文字寫入一行。該行被"\r\n"包圍,並使用fileOutputStream.write(string.getBytes())編寫。Java中的readline()不能正確處理中文字符

我沒有任何問題閱讀英文單詞的行,我的緩衝讀者完全用readLine()解析它。但是,它將中文句子視爲多行,從而搞砸了我的程序流程。

任何解決方案?

+0

它將與一些例子輸入和代碼幫助。 – 2011-02-11 09:46:50

回答

3

使用string.getBytes()使用平臺默認編碼編碼String。這很少是你想要的,特別是當你試圖編寫非當前語言環境的本地字符時。

請指定編碼(例如使用string.getBytes("UTF-8"))。

一個更清潔,更多的Java式的方式將是在OutputStreamWriter這樣來包裝你OutputStream

Writer w = new OutputStreamWriter(out, "UTF-8"); 

然後你可以簡單地調用writer.write(string),並不需要你想每次都重複編碼寫一個String

而且,如下所述,讀取文件時指定相同的編碼(最好使用Reader)。

+2

...並且當然也在構造閱讀器時指定編碼。 – 2011-02-11 09:49:37

2

如果您通過fileOutputStream.write(string.getBytes())輸出文本,那麼您輸出的平臺默認編碼爲。重要的是要確保您使用適當的編碼進行閱讀,並使用可識別編碼的方法。這個問題不會出現在你的BufferedReader實例中,但不管你有什麼Reader,它都會將字節轉換爲字符。

這篇文章可能是有用的:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

相關問題