字符编码

为什么要关心字符编码?

有时我们浏览网页,或者使用 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容

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