ASCII,Unicode, UTF-8 了解
ASCII
ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0
Unicode
Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储, 比如一个汉字用两个字节还是4个字节存储
UTF-8
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式:
- UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,
- 常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
- 如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
----------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节
其他格式:
- UTF-8:一种可变长度的方案,可使用1~6个字节存储。由此可见存储效率很高
- UTF-16:介于 UTF-8 和 UTF-32 的方案,采用2字节或者4字节进行存储
- UTF32:一种固定的4个字节的存储方式,编码一一对应即可,简单但是存储效率太低
Unicode和ASCII的区别
- ASCII编码是1个字节,而Unicode编码通常是2个字节。 字母A用ASCII编码是十进制的65,二进制的01000001;而在Unicode中,只需要在前面补0,即为:00000000 01000001。
- 新的问题:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划