概述
基础知识
- 编码:按照某种规则将字符储存到计算机中,如’a’用什么表示,称为
编码
- 解码:将存储在计算机中的二进制数取出,并解释成原字符,称为
解码
- 字符集:是一个系统支持的所有抽象字符的集合。就是一个表,每个符号都有对应的
编号
- 字符编码:是一套规则。在字符集拿到
编号
后,并不是简单的转成二进制数,而是根据这套规则来将编码压缩成一个更小的二进制数并储存到设备中,从而俭约了存储空间
常用字符集
- ASCII字符集
- GB2312
- BIG5
- GB18030
- Unicode 标准万国码
ASCII
ASCII字符集:包括控制字符,英文字符,阿拉伯数字和西文符号
ASCII编码:一共有127个符号,所以7位(bit)就可以保存了(2*7 == 128)。为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符
Unicode
Unicode字符集:超过十万个字符,万国码
Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。
utf-8编码
utf是unicode的一种实现方式。
utf8编码步骤
-
先从unicode字符集获取编码,例如 ‘真’:十进制:
30495
转成 二进制:01110111 00011111
-
单字节规则(ascii字符集囊括的字节):字节的第一位设为了0,后面7位是字节的二进制数
-
多字节规则:
- 判断字符的编码范围(1-4 bytes)
- 对于
n
个字节的符号,第一个字节的前n
个设为1
,n+1
设为0
。 - 后面的
n-1
个字节前两位设为10
- 然后把符号的unicode编码的二进制数 塞入 空白的二进制位
题目: ‘真’字 1. -- unicode --> 30495 --> 01110111 00011111 --> x771f 他的范围在 0x0800 ~ 0xffff 间,所以是3bytes(字节) 2.3字节: 1110xxxx 10xxxxxx 10xxxxxx 3.unicode编码二进制塞入空白处: 1110xxxx --> 1110 0111 10xxxxxx --> 10 011100 10xxxxxx --> 10 011111 4.utf8存入硬盘的二进制数是: 11100111 10011100 10011111。十六进制数是:
所以每种编码的规则不同,所以存入文件的二进制数也不同
字节序
将编码后的二进制(书籍blog通常以十六进制展示)存入存储器
‘真’字 如果用unicode码存入存储器,那么存入的值是 x771f,需要2个字节来保存,第一个字节保存 x77,第二字节存 x1f 。此处就是多字节