概述
ASCII用7位即可搞定。0-32是控制字符,32-127是其它字符。这个对于当时美帝和英帝的LAN是够用的。可是后来。。。大家互联了。
Unicode包括所有语言的所有字符。每个字符被赋予一个独一无二的 code point。但是 Unicode 是个抽象概念。存储,传输的过程就需要映射到电脑可以搞定的空间:字节。UTF(unicode transformation format)就是干这个的。
UTF-8
UTF-8是现在最常用的编码方法(encoding scheme)。它充分的体现了人类的智慧,以及 premature optimization 的不必要 -- 人类总能想出办法来填坑的。
牛在哪里?
以前ASCII编码的英文自动就是UTF-8编码
C语言用0来结束字符串对UTF-8仍然有效。
无需BOM (byte order mask)
如何做到的?
基本上把 code point 映射到下面的表就可以了。
Bits Last CP Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
7 U+007F 0xxxxxxx
11 U+07FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
21 U+1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
26 U+3FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
所以7位以下的前面加0用一个字节即可。11位的分俩字节,前面各加110和10。等等等等。上表也表示了一个UTF-8编码的字符可以是1个字节,也可以多达6个字节。
发明人是 Ken Thompson 和 Rob Pike。所以大牛就是大牛。这个是造福全人类的东东。
其它
还有 UTF-16 和 UTF-32 这些其(hen)它(lan)的编码格式。这里说不废话就不废话了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。