如果我保存一個國際字符,如日文,它需要超過1個字節來表示,在UTF-8中,當我讀回數據時,是否會丟失數據?Java - 閱讀國際字符
我的意思是,如果我使用UTF-8,我會用2個字節來保存一個字符。在讀取字節的同時,我可能會在讀取第二個字節之前讀取第一個字節,在這種情況下,它會顯示完全不同的字符或亂碼?
有沒有辦法保存這些國際字符,並閱讀它們而不使用任何編碼和解碼?
如果我保存一個國際字符,如日文,它需要超過1個字節來表示,在UTF-8中,當我讀回數據時,是否會丟失數據?Java - 閱讀國際字符
我的意思是,如果我使用UTF-8,我會用2個字節來保存一個字符。在讀取字節的同時,我可能會在讀取第二個字節之前讀取第一個字節,在這種情況下,它會顯示完全不同的字符或亂碼?
有沒有辦法保存這些國際字符,並閱讀它們而不使用任何編碼和解碼?
如果我保存了一個像日語這樣的國際字符,它需要超過1個字節來表示,在UTF-8中,當我讀回數據時,是否會丟失數據?
不可以。如果正確寫入/讀取文件,則不會丟失數據。
而簡單的方法來正確地讀/寫的文字是用Writer
和Reader
API的顯式指定編碼當你構建寫入/讀取器實例(例如使用的InputStreamReader/OutputStreamWriter),或使用的FileReader/FileWriter的,靠在默認平臺上編碼。 Java實現根據顯式或隱式選擇的編碼方案爲您處理char < - >字節編碼和解碼。
我的意思是,如果我使用UTF-8,我會用2個字節來保存一個字符。
實際上,取決於Java char
值的一個,兩個或三個字節。
而當我讀取字節時,我可能在讀取第二個字節之前讀取第一個字節,在這種情況下,它會顯示完全不同的字符或亂碼?
如果你沒有正確解碼UTF-8(即根據規範),你可能會得到各種垃圾。但是你不應該試圖用手解碼它。使用Reader和Writer API,Java將爲您處理所有這些東西。
有沒有辦法保存這些國際字符,並閱讀它們而不使用任何編碼和解碼?
這沒有意義。每當你從Java寫入字符到一個文件,你就是暗中對它們進行編碼...即使編碼是身份轉換(例如UTF-16)
@Stephen ... FileReader和FileWriter構造函數不採用任何編碼。 – user547453
你說得對。糾正。 –
謝謝Stephen! – user547453