美国:ASCII(American Standard Code for Infomation Interchange,美国信息交换标准代码),共计可以表示128种字符
法国,德国等,ISO-8859-1:8表示一个字符,即用一个字节(byte)(8bit)来表示一个字符,共计可以表示256个字符。
国标:gb2312就出现了,使所有的汉字进行了编码,生僻字不表示,也不够用了
GBK:解决了生僻字
后来发现还不够用,gb18030来解决
big5台湾繁体字
后来发现这样比较乱,一个组织定义了Unicode,包括了全世界所有字符,采用了两个字节表示一个字符,对于只需要英文字母的国家来说,太占空间了,所以出现了UTF-8
其中UTF为Unicode Translation Format
Unicode是一种编码方式,utf是一种存储格式,不管utf-8还是UTF-16等等,都是Unicode实现方式之一。
UTF-16LE,UTF16-BE,前两个字节来区别大端和小端
utf-8一般通过3个字节来表示一个中文,ASCII码值用一个字节
utf-8实现方式
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8 是 Unicode 的实现方式之一。
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8 的编码规则很简单,只有二条:
-
对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
-
对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
下表总结了编码规则,字母x表示可用编码的位。
image.png
跟据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
下面,还是以汉字严为例,演示如何实现 UTF-8 编码。
严的 Unicode 是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800 - 0000 FFFF),因此严的 UTF-8 编码需要三个字节,即格式是1110xxxx 10xxxxxx 10xxxxxx。然后,从严的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,严的 UTF-8 编码是11100100 10111000 10100101,转换成十六进制就是E4B8A5
网友评论