文章标题:
中文字节占比的缘由剖析
文章内容:缘由
在学习Java基础期间,曾经有过这样的想法:认为对于s2来说,一个中文占据3个字节,21845个中文刚好占用65535个字节,并且字符串长度也没有超过限制,所以能够编译通过。但后来发现这个说法是错误的,实际上Java中char的存储方式是LATIN - 1(1字节)或者UTF - 16(2字节),不过这却引发了我对UTF - 8的思考,疑惑为什么中文字符是占3个字节,而不是2个字节呢。
- Java的默认编码格式
那我们来看看UTF - 8的相关维基内容。
- Unicode
其含义就是为每一个字符(任何语言的字符)提供一个唯一的编码,以此来满足跨语言、跨平台的文本信息转换需求。
码点的位数 | 表示的Unicode范围 | 字节序列 | Byte 1 | Byte 2 | Byte 3 | Byte4 |
---|---|---|---|---|---|---|
7 | 0~127 | 1 | 0xxxxxxx |
|||
11 | 128~2047 | 2 | 110xxxxx |
10xxxxxx |
||
16 | 2048~65535 | 3 | 1110xxxx |
10xxxxxx |
10xxxxxx |
|
21 | >65535 | 4 | 11110xxx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
比如“中”字的Unicode为4E2D
,由于4^(16×16×16) = 16384 > 2047,所以显然是用3位的UTF - 8来存储的。
相关文章
暂无评论...