在线计算机字符编码查询,字符编码

为什么需要字符编码

先简单说明字符编码相关的几个概念。

这里的描述可能不一定准确,只是为了简化理解。

如有不对,欢迎指正。

字符

可以表达意图的汉字、英文字母、阿拉伯数字等文字符号。也就是书面语言的基本组成单位。

为什么需要编码

计算机只能识别和存储 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/…

对于字符编码,程序员的话应该了解它的哪些方面? - 科言君的回答 - 知乎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值