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字节表示。

  • 相关阅读:
    黄聪:Visual Studio快速封装字段方法
    黄聪:在vs2008中设置jquery智能提示
    黄聪:Linq初级班 Linq to DataSet体验(单表、多表联合查询JOIN语法)
    mysql分区
    为什么使用框架
    阅读杂记(RSA,PDO)
    Golang之继承模拟
    php中$_REQUEST一个注意点
    记录mysql性能查询过程
    知识杂记
  • 原文地址:https://www.cnblogs.com/iwish/p/3398263.html
Copyright © 2011-2022 走看看