写入字符数据我已阅读,字节流不支持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,但它正在服用,以及它的工作方式,我感到困扰? –