gpt4 book ai didi

java - java中的字节流

转载 作者:行者123 更新时间:2023-11-29 03:39:24 24 4
gpt4 key购买 nike

我们可以使用 ByteStreams 在文件中写入 Unicode 数据吗?我的代码是:

 public static void main(String[] args) throws Exception {

String str = "Русский язык ";
FileOutputStream fos = new FileOutputStream("file path");
fos.write(str.getBytes());
fos.flush();
fos.close();
}

我在这里使用字节流来写入 unicode 数据,但它写入正确。我是 java 的新手,但我读到字节流不支持 unicode 字符。那么,为什么它在这种情况下有效?

最佳答案

i have read that byte streams do not support unicode characters.

要么您使用了错误的信息来源,要么您可能误解了某些内容。字节流支持字节。因此字节流支持可以用字节表示的任何。视频、文字、图片、音乐……如果字节流不支持,根本无法在数字计算机中使用。

用 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 规则将文本转换为字节。

关于java - java中的字节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com