一、字节

字节(Byte)是通过网络传输信息(或硬盘、内存中的存储信息)的单位。

1个英文字母(不区分大小写)占1个字节空间;1个中文汉字占2个字节的空间。

在计算机中的存储形式(使用二进制表示)

1111 1111 -> 1个字节

二、字符

字符是可使用多种不同字符方案或代码页来表示的抽象实体。

例如:

(1)Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列。

(2)公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符。

综上:

如果“字符”是以 ANSI 编码形式存在的,比如有这样一个字符串:“hello,前端”

英文字节:1*5个字节

中文字节:2*3 => 6个字节(其中逗号是中文逗号)

测试小例子:

<?php
    echo '1: ' . $en = 'hello';
    echo '<br />';
    echo '2: ' . $zh = '前端';
    echo '<br />';
    echo '3: ' . $en_zh = $en . $zh;
    echo '<br /><br />';
    
    echo '英文编码:' . mb_detect_encoding($en) . '<br />';
    echo '中文编码:' . mb_detect_encoding($zh) . '<br />';
    echo '英文和中文编码:' . mb_detect_encoding($en_zh) . '<br />';
    
    echo '纯英文字符长度: ' . strlen($en) . ' 字节' . '<br />';
    echo '纯中文字符长度: ' . strlen($zh) . ' 字节' . '<br />';
    echo '混合的时候字符长度: ' . strlen($en_zh) . '<br />';
?>

效果图:
php-string

三、ASCII码

计算机中用二进制数表示字母、数字、符号以及控制符号,目前主要用ASCII码(美国标准信息交换码)。

(1)常用字符有128个,编码从0~127;

(2)控制字符:0~31和127,共33个,不可显示;

(3)普通字符:95个,包括10个阿拉伯数字(0-9)、52个英文大小写字母([a-z]A-Z])、33个运算符;

(4)每个字符占1个字节,7位,最高位为0。

2^7 = 128,即:0~127
0xxx xxxx

(5)编码数具有递增的特性:a-z -> 97-122

附:ASCII表 在文章最后。

四、UTF-8

(1)字节中的UTF-8

UTF-8是用来解决国际上的多字节编码。

UTF-8对英文使用8位(即:1字节)的空间,在中文中使用24位(即:3个字节)来编码。

8位 = 1字节

所以,当我们的网站英文占的比例比较大的时候,采用UTF-8每个字符自占用1字节(其实正常情况下,1个英文字母就应该是1个字节的空间)。这样,就能够节省部分空间。

我们可以这样子计算utf-8中文字符串的长度:

<?php
    $en = 'hello';
    $zh = '前端';

    function utf8_strlen($string = null) {
        preg_match_all('/./us', $string, $matches);

        return count($matches[0]);
    }

    echo utf8_strlen($en) . '<br />';
    echo utf8_strlen($zh);
?>

最后会输出:

5
2

五、GB18030、GBK与GBK2312

ASCII表
ascii

参考

http://blog.163.com/liubin_1990/blog/static/16256303920129102321582/

标签: 编码

添加新评论