gpt4 book ai didi

java - 为什么Java无法读取UTF-8文件中的unicode字符?

转载 作者:行者123 更新时间:2023-12-01 17:50:10 25 4
gpt4 key购买 nike

“unicode.txt”UTF-8 文件

𫢹アफਸᙡşüabÇİÜ⏩ア

第一个字符有 4 个字节。当我运行这段代码时,我无法获得我期望的输出

InputStream in = new FileInputStream("unicode.txt");
InputStreamReader inReader = new InputStreamReader(in, "UTF-8");
char ch = (char)inReader.read();
System.out.println(ch); // Writes '?' character to the console. Why ?

为什么这段代码不向控制台写入“𫢹”字符?我该如何写它?

我的默认编码:

System.out.println(System.getProperty("file.encoding")); // output: "UTF-8"
System.out.println(Charset.defaultCharset()); // output: "UTF-8"

我认为问题出在 char 数据类型上。

谢谢。

最佳答案

char 数据类型基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。此后,Unicode 标准已更改为允许表示需要超过 16 位的字符。 Unicode 代码点的范围现在是 U+0000 到 U+10FFFF。从U+0000到U+FFFF的字符集称为基本多语言平面(BMP),码位大于U+FFFF的字符称为增补字符。因此,char 值表示 BMP 代码点,包括代理代码点或 UTF-16 编码的代码单元。 int 值表示所有 Unicode 代码点,包括补充代码点。

特别是,不要编写假设基本类型 char(或字符对象)的值完全表示 Unicode 代码点的代码。

(来自 https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?contentId=88487813#content/view/88487813 )

换句话说,您偶然发现了一个 unicode 字符,该字符由 Java 使用的可变长度 UTF-16 编码中的多个 BMP 代码单元(即 char)表示。

关于java - 为什么Java无法读取UTF-8文件中的unicode字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119335/

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