寫入字符數據我已閱讀,字節流不支持Unicode字符。
要麼你使用了一個不好的信息來源,或者你可能誤解了某些東西。字節流支持字節。因此字節流支持任何可以用字節表示的。視頻,文本,圖片,音樂......如果字節流不支持它,它根本不能在數字計算機中使用。
用簡單的1和0的序列表示這些事物的訣竅是使用約定的規則。您可以根據特定的規則對文本進行編碼,然後接收器可以使用相同的規則將其解碼。
"Русский язык"
可以表示爲支持西里爾字符的任何編碼中的字節。在任何unicode的編碼中:UTF-8,UTF-16,UTF-32; Windows-1251,KOI8-R,KOI8-U,ISO-8859-5 ...
這並不意味着這些編碼是相互兼容的。它們在編碼西里爾腳本時都是不兼容的,因此編碼在一個編碼中的文本必須嚴格按照該編碼進行解碼。
.getBytes()
使用平臺默認編碼,這恰好是支持西里爾腳本的編碼。你可能會認爲它是UTF-8,但如果你在Windows上,它更可能是Cp1251。不要因爲使用「unicode字符」而陷入陷阱,即您的文件是以UTF編碼進行物理編碼的。這將導致編碼問題。
所以始終明確的編碼,從而使你的程序的工作原理相同的任何平臺上,讓你總是知道什麼編碼的程序創建的文件在你的代碼,你可以這樣做:
String str = "Русский язык ";
FileOutputStream fos = new FileOutputStream("file path");
fos.write(str.getBytes("UTF-8"));
fos.flush();
fos.close();
或由對方回答提示:
String str = "Русский язык ";
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("file path"), "UTF-8"
);
osw.write(str);
osw.flush();
osw.close();
這在技術上是完全一樣的;文本正在根據UTF-8規則轉換爲字節。
@Andrew先生,從現在起我會保重的。 –
Unicode的東西在'getBytes()'調用中處理,不過你應該真的把它傳遞給像UTF-8這樣的顯式字符集。 –
@Louis Wasserman但是在這裏我沒有提到UTF-8,但它正在服用,以及它的工作方式,我感到困擾? –