Garaguru's Blog Just A Normal Student

常见字符编码总结

2019-09-21
Garaguru

ASCII

所有字符只占一个字节的编码,只包含英文和英文符号,和一些控制字符

Unicode

Unicode 只是一个字符集,不是一种具体的编码,这个字符集为所有字符分配了一个具体的编号,从 0x0000000x10FFFF,总共 110 多万,换而言之,它只规定了编号是多少,但没有规定编号如何去存储,举个例子,在 utf-8中,128号字符对应的是 0b11000000 10000000,其值并不等于 128,而在 utf-32中,其值则确实等于 128:0x000080

UTF-8

UTF-8,是 Unicode 的实现之一,其他的实现还包括 UTF-16, UTF-32 和 GB18030

目前来说,UTF-8 是 web 上最常见的编码

UTF-8的特点就是变长,单个字节用于表示常见的 ASCII 字符,而中文汉字多是三个字节,也有占四个字节的生僻字

0xxxxxxx (0-127)
110xxxxx 10xxxxxx (128-2047)
1110xxxx 10xxxxxx 10xxxxxx (2048-65535)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (>= 65536)

UTF-16

所有字符都占两个字节的编码

值得一提的是,有种编码叫 UCS-2 也是所有字符都占两个字节的一种编码,通常称 Unicode (在 java 中,或者在 windows 的记事本里),这种编码和 UTF-16 大体上是一致的,但并不相等,有部分编码不同

UTF-32

直接翻译 Unicode 的一种编码,所有字符都占4个字节

GB 2312 与 GBK

GB 2312 只收录 6763 个汉字,所有字符都是两个字节的,包括英文和符号字符

GBK 是 GB 2312 的扩展版本,完全兼容 GB 2312,同样是双字节


上一篇 QUIC 协议详解

Content