2012-12-29 107 views
0

如果我保存一個國際字符,如日文,它需要超過1個字節來表示,在UTF-8中,當我讀回數據時,是否會丟失數據?Java - 閱讀國際字符

我的意思是,如果我使用UTF-8,我會用2個字節來保存一個字符。在讀取字節的同時,我可能會在讀取第二個字節之前讀取第一個字節,在這種情況下,它會顯示完全不同的字符或亂碼?

有沒有辦法保存這些國際字符,並閱讀它們而不使用任何編碼和解碼?

回答

2

如果我保存了一個像日語這樣的國際字符,它需要超過1個字節來表示,在UTF-8中,當我讀回數據時,是否會丟失數據?

不可以。如果正確寫入/讀取文件,則不會丟失數據。

而簡單的方法來正確地讀/寫的文字是用WriterReader API的顯式指定編碼當你構建寫入/讀取器實例(例如使用的InputStreamReader/OutputStreamWriter),或使用的FileReader/FileWriter的,靠在默認平臺上編碼。 Java實現根據顯式或隱式選擇的編碼方案爲您處理char < - >字節編碼和解碼。

我的意思是,如果我使用UTF-8,我會用2個字節來保存一個字符。

實際上,取決於Java char值的一個,兩個或三個字節。

而當我讀取字節時,我可能在讀取第二個字節之前讀取第一個字節,在這種情況下,它會顯示完全不同的字符或亂碼?

如果你沒有正確解碼UTF-8(即根據規範),你可能會得到各種垃圾。但是你不應該試圖用手解碼它。使用Reader和Writer API,Java將爲您處理所有這些東西。

有沒有辦法保存這些國際字符,並閱讀它們而不使用任何編碼和解碼?

這沒有意義。每當你從Java寫入字符到一個文件,你就是暗中對它們進行編碼...即使編碼是身份轉換(例如UTF-16)

+0

@Stephen ... FileReader和FileWriter構造函數不採用任何編碼。 – user547453

+0

你說得對。糾正。 –

+0

謝謝Stephen! – user547453