42 条回复  ·  4482 次点击
zhouyin 楼主 小成 2025-2-9 12:58:23
@zhouyin 可能因为默认编码 utf-8
zhouyin 楼主 小成 2025-2-9 13:00:49
@zhouyin FileWriter 默认 iso-8859-1 编码 单字节
zhouyin 楼主 小成 2025-2-9 13:31:30
@zhouyin java17 filewriter 默认 encoding utf8
dandycheung 小成 2025-2-9 13:34:54
你把语言里类型的字长跟存储时编码的存储方案搞混了。在 Java 语言里,你把一个中文的字符串取一下长度看是不是 1 ,跟 char 能不能对上,结论就出来了。
zhouyin 楼主 小成 2025-2-9 13:43:25
@dandycheung 没搞混哦 你的回答比较低级 我如果这都不知道 就不会问底层的字节了 这帖的精华是 编译器把输入的 utf8 汉字的三个字节 主动隐式地换成了 2 个字节 utf16 了
dandycheung 小成 2025-2-9 13:52:33
总之就是,Java 语言用两个字节存储一个 char ,而一个汉字在 UTF-8 编码后有三个字节长,但是它仍然是一个 char ,在 Java 语言中占用两个字节;一个英文字母在 UTF-8 编码后是一个字节长,但它也是一个 char ,在 Java 语言中占用两个字节。 有没搞混无所谓了,你自己判断就好。
wuyiccc 小成 2025-2-9 13:56:05
那你看看这个中文汉字 '𠮷' 还能赋值么
sagaxu 初学 2025-2-9 14:05:55
@zhouyin @dandycheung 2 字节上限只有 65536 个字符,但 unicode 已经超过 10 万个字符了。
wind1986 小成 2025-2-9 14:15:18
@theoriz 你怕是有什么大病吧?
xuld 小成 2025-2-9 14:17:27
“一个 char 由两个字节组成 但一个 utf8 汉字由三个字节组成”,这句话本身没有问题,但代码里的 char 变量和这句话里的 char 不是一回事.。 字符的本质就是一个整数,比如“我”的编码是 25105 ,几乎所有程序在运行时都会直接存储 25105 。 编译器同理,无论源码里面是什么,用什么编码,最后都会统一解析出 25105 这个数值。 java 的 char 类型本质是一个 16 位整数。char a = '我'; 本质等价于 short a = 25105 。显然没有问题。 所以这个问题其实和“Unicode”、“UTF-8”没有任何关系、更不要去扯什么文件编码,那只会越扯越糊涂。
返回顶部