Java 为什么能给 char 类型赋值中文字符

4 天前
 zhouyin
java 文档里有写 一个 char 由两个自己组成 但一个 utf8 汉字由三个字节组成
为什么这样赋值没事?

char a = '我';
4268 次点击
所在节点    Java
65 条回复
realJamespond
3 天前
相当于 c++的 wchar ?
Huelse
3 天前
https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html

char 是存储 unicode 字符而不是 utf-8 字符编码

"which defined characters as fixed-width 16-bit entities"说明是 16 位,同时是 utf-16 编码

大部分中文在 unicode 中都是 2 个字节,少数是 3 个字节,所以存在变长补位的说法
sofm
3 天前
java 中的 char ,能表示 unicode 中处于基本平面 BMP 的所有字符,从 0-65535 ,合计 65536 个字符,这 65536 个字符包括了 全世界范围内语言的 常用字符,自然也包括中文。 特殊生僻字 不在 char 范围内。

char 的取值范围不能超过 65535 ,ide 会爆红提示错误。

char 表示数字,中文在 unicoe 中也是一个数字编号。

当想 print char 时,会将中文字符,转成 实际的 utf-8 的 3 个字节,如果 terminal 配置的时 utf-8 ,就会将这 3 个字节 整体显示为 一个 中文字符。
lululau
3 天前
哈哈,所以程序员也要多用用 Windows ,在 Windows 上摸爬滚打过的,自然对字符编码的问题了解得比较细致
lff0305
2 天前
String 类的方法 codePointCount ,offsetByCodePoints 就是解决这个问题的( unicode 的 2/3/4 字节)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1110066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX