在线计算机字符编码查询,字符编码
为什么需要字符编码
先简单说明字符编码相关的几个概念。
这里的描述可能不一定准确,只是为了简化理解。
如有不对,欢迎指正。
字符
可以表达意图的汉字、英文字母、阿拉伯数字等文字符号。也就是书面语言的基本组成单位。
为什么需要编码
计算机只能识别和存储 0 1 。要在计算机中表示字符,就需要将字符和一个数字对应(数字可以使用二进制表示时只需要用到 0 和 1.)。
在说字符编码之前,先说一下字符集。
字符集
字符集是特定字符的集合,同时给每个字符分配了一个唯一的 ID(学名为码位 / 码点 / Code Point)来表示字符。
需要注意,这里还没有涉及到计算机层面,仅仅是理论层面。
也就是将一个特定的字符集合,映射到了一个特定的 ID 集合——用一个 ID 来表示一个字符。
不同的字符集所包含的字符不同。
不同的字符集有不同的对应关系。
不同字符集,可能部分字符的对应关系一样,部分字符的对应关系不一样。
字符编码
在计算机中如何表示一个字符,也就是字符集中的「码点」。
通常就是直接用「码点」的二进制来表示,也就是这种情况下字符编码和字符集是等价的。
也存在两者不同的情况,后面会说明。
某种程度上可以说,字符集是一种协议(规定了如何用一个ID来表示字符),而字符编码是对字符集的一种实现(实际上在计算机中如何存储字符)。
简单编码系统
在简单编码系统中,没有严格区分字符集和字符编码,所以字符集和字符编码的概念是等价的。
ASCII 编码就是最常用的简单编码。
当我们说 ASCII 编码的时候,实际上和 ASCII 字符集都是在描述同一个东西:使用 7 bit 的 128 个数字来表英文大小写字母、数字、控制字符等字符。
为了表示中文,也出现了 GBK 相关的编码,他们也是简单编码,也就是字符集和字符编码是同一个概念。
现代编码系统
世界上存在大量的文字,也存在了大量的字符集/字符编码方案。
随着交流的加深,文字需要在不同计算机之间传输,也就是不同字符编码之间传输转换,很容易出现“乱码”的现象。
为了解决这个问题,Unicode (统一码)应运而生。
Unicode 是一个字符集,规定了如何用一个 ID 来表示一个字符。与其他字符集不同的是,Unicode 要表示所有的字符,以便世界各地的人民都能用来表示自己的文字。
Unicode 定义了每个字符与 ID 的对应关系。由于字符很多,ID 的范围也很大,如果计算机直接用 ID 的二进制来表示,就会占据大量的空间。
比如 a 的 Unicode 编码是 \u0061 , 中 的 Unicode 编码是 \u4e2d 。对于 a 等英文字母来说,他们的 Unicode 编码的高位都是 0 ,如果使用 2 个字节存储下来,就会浪费很多空间。而对于 中 等中文字符来说,如果只用 1 个字节是存储不了的。甚至有些字符需要使用 3 个、4 个字节才能存储。
因此出现了多个变长的编码方式,不同的字符使用不同长度的字节来表示,从而达到既能覆盖 Unicode 字符集的范围,又能减小存储空间。其中最为突出的就是 UTF-8。另一方面,变长字符编码,也带来了一个问题,不能快速定位第 X 个字符的位置,必须从头开始遍历字节序列才能确定第 X 个字符的位置。
简单来说 Unicode 是一个字符集,UTF-8、UTF-16、UTF-32 等是字符编码。
Ref
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets www.joelonsoftware.com/2003/10/08/…
对于字符编码,程序员的话应该了解它的哪些方面? - 科言君的回答 - 知乎