(10)一个字符占几个字节?

问题:理论是2字节(汉字 字母)。UTF-8时new String("字").getBytes().length 返回3

一、R大回答:

分清楚内码(internal encoding)、外码(external encoding)

内码:程序部用的字符编码实现char、String类型内存里用内部编码

           规定内码UTF-16。或让用户无感知到String用非UTF-16

外码:程序与外部交互字符编码。不是内存用都是“外部”。如,序列化后char或String,或外部文件、命令行参数。

           规定外码UTF-8。Class的字符串常量、符号名字也是。为了平衡运行时的时间效率定长UTF-16)与外部存储空间效率变长UTF-8)做取舍。

Java语言规范规定,char是UTF-16的code unit,也就是一定是16位(2字节);

答:String.getBytes():内码转指定码。外码UTF-8,得到byte[]外码性质

题外话:

(1)JavaScript用UTF-16作为内码,“压缩字符串”用ASCII内码字符串,用户只能看到UTF-16 code unit。

(2)UTF-16大部分定长2字节,偶尔4,无法兼容于ASCII编码

二、回答:脱离具体编码谈某个字符占几个字节,没意义

1、同一个字符 不同编码,占不同字节

(1)抽象整数“42”占几个字节?

byte1 字节(有限位数,256 无法存),short 2,int 4,long 8 字节

GBK 2 ,UTF-16  2 ,UTF-8  3,UTF-32  4 字节

2、不同字符,同编码下,占不同字节

UTF-8 变长:“”3字节,“A” 1 字节。

new String("字").getBytes("GBK").length ”,返回2

https://www.zhihu.com/question/27562173

你可能感兴趣的:((10)一个字符占几个字节?)