[翻译]你真的知道你看到的UTF-8字符是什么吗?

翻译自http://www.pixelstech.net/article/1397877200-You-know-what-UTF-8-is-when-you-see-it-

Source : sonic0002

如有版权问题请告知.

在编码的时候我们经常会看到UTF-8, GB 2312之类的字样. 可你真的了解这些编码的意义吗? 我们为什么需要这些编码呢? 在这篇文章里,  Julián Solórzano将会给我们介绍世界上使用范围最广/包含所有不同字符集的编码规则.

UTF-8是一种Unicode字符的编码方式, 它使用8个bit. Unicode是一种用来对不同语言中大多数字符进行编码的标准.

大约40年前, ASCII诞生了. 原始的ASCII包含128个字符, 包括大小写英文, 数字和标点符号, 每个字符使用7个bit编码.

随后出现了"拓展ASCII", 它使用8个bit来包含更多的字符, 比如 á, é, ü. 对于这额外的128个字符空位, 出现了许多不同的代码映射集. 比如latin1, windows-1252等等(对于这128个额外字符, 没有固定的对应表, 取决于种族语言和操作系统等).

很明显128(7bit)或256(8bit)个字符空位对于同时代表众多字符都是不够的. 因此Unicode作为一个可以代表几乎所有文字系统的标准被提出了. 目前它包含超过1000,000个字符(code point). UTF-8 是一种用来编码这些字符的方式. 在UTF-8中的一个字符可以由1个或更多字节(byte)组成. 前128个字符和ASCII码是一样的. 之后的字符就使用超过1个字节来进行编码. 一个独立字符中的每个字节都以一个特殊的位顺序开头来表示此字节和前一个字节描述的是同一个字符.

Table from Wikipedia:

比如, á是一个Unicode字符编码, U+00E1, 或者 225(十进制)


225的二进制是11100001.

因为需要8个bit来表示这个数字(225), 因此在UTF-8中我们需要使用2个字节来对它进行编码(原ASCII表中的前128个字符才使用1个字节, 它们只用7个bit). 所以, 使用第一张表作为参考, 我们可以把这个字符编码成:

11000011 10100001

粗体部分是数字225, 非粗体的是编码必须的模式.

因此, 如果你打开了一个包含字节c3 a1的文本文件, 并且程序认为编码格式是UTF-8, 你就会看到 á.


原文地址:https://www.cnblogs.com/lancelod/p/3849370.html