Unicode
虽然通过使用不同字符集,我们可以在一台机器上查阅不同语言的文档,但是我们仍然无法解决一个问题:
如果一份文档中含有不同国家的不同语言的字符,那么无法在一份文档中显示所有字符。
为了解决这个问题,我们需要一个全人类达成共识的巨大的字符集,这就是Unicode字符集。
Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码(CodePoint)。Unicode字符集将所有字符按照使用上的频繁度划分为17个层面(Plane),每个层面.上有216=65536个字符码空间。
其中第0个层面BMP,基本涵盖了当今世界用到的所有字符。其他的层面要么是用来表示一些远古时期的文字,要么是留作扩展。我们平常用到的Unicode 字符,一般都是位于BMP层面上的。目前Unicode字符集中尚有大量字符空间未使用。
缺点:
Unicode只是规定了一个符号的二进制代码,但是没有规定二进制代码应该如何进行存储:无法区别Unicode和ASCII。 并且使用Unicode编码的英文字母需要用三到四个字节去表示,会造成极大的存储空间浪费。
utf-8
utf-8是unicode的一种实现方式,使用最为广泛。
utf-8是一种变长的编码方式,使用1-6个字节去表示一个符号,解决了Unicode的英文字母浪费空间的缺点。
utf-8编码规则:
- 对于单字节的utf-8,字节的最高位为0,其余七位用来对字符进行编码。
- 对于多字节的编码,如果编码包含了n个字节,那么第一个字节的前n位为1,第一
编码,如果编码包含了n个字节,那么第一个字节的前n位为1,第一
个字节的第n+1 位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。