字符编码

为什么要关心字符编码?

有时我们浏览网页,或者使用 Windows 自带的记事本查看包含非基础拉丁字符的文件时,会看到类似的现象:

乱码事例
乱码事例

「天呐,文字内容看不懂,我打开是什么!」
「内容没法正常显示,多半是字符编码的锅。」

此现象称为「乱码」,日语称为文字化け,英语称为 Mojibake(音译自日语)。「乱码」改变的不仅仅是字形,连字符个数都将受影响;不光会大大影响阅读,而且会在 web 上使你生产的内容无法被搜索引擎识别。无论作为阅览者,还是生产者,乱码都是我们需要避免的问题。

什么是字符编码

首先,还要先提另一个概念:「字符集」。

「字符集」和「字符编码」有什么关系吗?

  1. Charset is the set of characters you can use.

  2. Encoding is the way these characters are store into memory.

摘自于 Stackoverflow.

「字符集」就是字符的集合,而「字符编码」是字符如何存储在计算机中的方式。举个例子,Unicode 就是「字符集」,而 UTF-8 则是「字符编码」。

有很多种不同的字符编码,不同的字符编码定义字符的方式也不一样。例如每台计算机都带有的 ASCII 编码,大陆常用的 GB2312, GB18030、台湾常用的 BIG5,以及未来趋势 UTF-8。

UTF-8

最常见的 ASCII 采用 7 位表示一个字符,共课表达 128 个字符,仅能显示基本拉丁字符,对于其他语言完全不够,更加别提字符数量巨大的 CJK 地区字符。不管是大陆的 GB18030 或 台湾的 BIG5,虽然能满足中文使用,依然面临诸多不便,例如如果海外的计算机不内置这些编码,则无法阅览相关内容。所以,企图包含人类所有字符的字符集出现了:Unicode。目前(2017-03-06)最新版本为 9.0。

如此庞大的字符,如何为其编码?Unicode 定制时,计算机存储器容量也大大增长了。Unicode 采用 16 位表示一个字符,对于 ASCII 与其扩展保持不变,剩下高位用 0 填满。其他语言重新编码。然后新的问题来了:

原本拉丁字符只要占 1 个字节,现在却要花更多的空间。

UTF-8 还好的解决了这个问题——采用变长编码的方式。UTF-8 使用 1~4 个字节表示一个字符。这里引用他人的描述:

  • 如果一个字节的第一位为 0,那么代表当前字符为单字节字符,占用一个字节的空间。0 之后的所有部分(7 个 bit)代表在 Unicode 中的序号。
  • 如果一个字节以 110 开头,那么代表当前字符为双字节字符,占用 2 个字节的空间。110 之后的所有部分(5 个 bit)加上后一个字节的除 10 外的部分(6 个 bit)代表在 Unicode 中的序号。且第二个字节以 10 开头
  • 如果一个字节以 1110 开头,那么代表当前字符为三字节字符,占用 2 个字节的空间。110 之后的所有部分(5 个 bit)加上后两个字节的除 10 外的部分(12 个 bit)代表在 Unicode 中的序号。且第二、第三个字节以 10 开头
  • 如果一个字节以 10 开头,那么代表当前字节为多字节字符的第二个字节。10 之后的所有部分(6 个 bit)和之前的部分一同组成在 Unicode 中的序号。

如何查找某个字符的编码?

macOS 自带的表情与符号可以找到字符在不同编码方式下的码位。

表情与符号
表情与符号

reference

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、乱码 首先,所有信息在计算机上都是以二进制形式存储。而当出现乱码的时候往往是将这些信息以字符的形式表现之后。这...
    假鞋子阅读 5,166评论 0 0
  • 乱码 乱码是怎么出现的呢?对同一组二进制数据,不同的编码会解析出不同的字符,用对了编码,解析出来的字符组成的文字是...
    __Jasmine__阅读 3,853评论 0 0
  • ** 本文转载自 CENALULU`S TECH BLOG,学习使用,侵删。 * 本文将简述字符集,字符编码的概念...
    王康_Wang阅读 2,555评论 0 0
  • 不堵车的时候可以哼着小曲,放着动感DJ,狂野的行驶着,不知堵车为何物。 堵车的时候堵到想脱口大骂,耽误时间不说,还...
    孙圳pm阅读 4,844评论 3 2
  • 我堂哥总觉得我是个苦逼孩子。 这事是没法解释的,即使我说我有正常的文娱生活,偶尔旅行吹吹海风,一个人陪狗在屋子里打...
    越女事务所阅读 2,256评论 0 0

友情链接更多精彩内容