字符串长度和占用内存字节utf-8和GBK中⽂字符的长度计算
计算中⽂字符长度,通常会想到1个中⽂字符占两个字节。我本来⼀直也这么认为,可是⼀次计算utf-8中⽂字符的时候,似乎⼜并没这样计算,这就要看中⽂到底是以什么机器可识别字符存储的。
我⾸先在PHP中做了实验,⽤strlen()函数取中⽂字符串“我是”的长度,在UTF-8下是6,在GBK下是4,说明UTF-8每个中⽂字符占⽤了3字节,GBK每个中⽂字符占⽤2字节。
然后我⼜在WINDOWS 7下⽤EditPlus做了实验,分别保存纯⽂本(不含任何空格,只有末尾空字符,不算⼊长度)“我是”,然后⽤⼗六进制的⽅法查看,UTF-8下是"E6 88 91 E6 98 AF" 和 GBK下是"CE D2 CA C7",和PHP中所得结果相同。
所以基本确定了这两种字符集在处理中⽂时的不同。在我查资料前,我凭经验猜测,因为GBK主要存储是中⽂字符集,所表⽰字符的种类没有UTF-8这种国际通⽤字符集表⽰的种类多,⾃然不需要太⼤的字符空间。再查阅了UTF-8的原理,在看刚才中⽂字符的⼗六进制表⽰,如下:
0xxxxxxx ——1个字节
110xxxxx 10xxxxxx ——2个字节
1110xxxx 10xxxxxx 10xxxxxx ——3个字节
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx ——4个字节
"E6" 中主要看前⾯的"E",E=1110,表⽰由三个字节组成字符,所以中⽂这类才⽤3字节表⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论