zoukankan      html  css  js  c++  java
  • 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字节表示。

  • 相关阅读:
    漫谈委托和事件
    CSS从今以后不用发愁
    分享我对领域驱动设计(DDD)的学习成果
    [转]使用CSS3实现树形控件
    Golang 常量
    牛客网做算法题时 golang 读取输入的方法
    Golang 占位符
    Golang 字符和字符串的区别
    Golang 基本数据类型
    Golang 输入
  • 原文地址:https://www.cnblogs.com/iwish/p/3398263.html
Copyright © 2011-2022 走看看