字符编码

平时我们经常会遇到各种各样的字符编码,最常见的就是 ASCIIUTF-8 除此之外还有 GB2312GBKEASCII 等等很多的字符编码。我们经常提到的Unicode是一个字符集,并不是一种字符编码方案。但是这些编码方案到底是如何将字符编码的,对应的历史发展关系又是怎样的呢?

字符集术语

在讲述字符编码之前,这里统一一下字符集术语。这部分是纯概念的部分,不感兴趣的同学可以直接跳过这部分。

  • 字符
    字符是指字母、数字、标点、表意文字(比如汉语)、符号,或其他文本形式的书写"原子"。由统一字符集 (Universal Character Set, UCS) 首创,为多种语言中的很多字符开发了一系列标准化的文本名称,它们常用来便捷的命名字符,而且不会与其他字符冲突。
  • 字形
    描述字符的笔画图案或唯一的图形化形状。
  • 编码后的字符
    分配给字符的唯一数字编号,这样我们就可以操作它了。
  • 编码空间
    计划用于字符编码的整数范围。
  • 编码宽度
    每个(固定大小的)字符编码所用的位数。
  • 字符集
    特定的工作字符集(全体字符的一个子集)。
  • 编码后的字符集
    组成字符库(从全球的字符中选出若干字符)的已编码字符集,并为每个字符分配编码空间的一个代码。换句话说,它把数字化的字符代码映射为实际的字符。
  • 字符编码方案
    把数字化的字符代码编码成一系列二进制码(并能相应地反向解码)的算法。

各种编码方案的历史及编码方式

计算机首先是在美国发明出来的,为了使美国常用的一些字符能在计算机中进行操作,他们就对美国现有的字符进行编码。首先出现的比较规范的编码方案就是ASCII码

ASCII码

ASCII码 (American Standard Code for Information Interchange,美国信息交换标准代码) 这种编码方案采用一个字节表示一个字符,一个字节 8bit
2^8 可以表示 256 个状态,但是其中只使用了 128 个状态,最高位始终为 0 。其中 0 ~ 31 表示控制字符,32 ~ 126 表示可显示的字符,127 表示删除。ASCII码对照表。在美国这个字符编码方案是够用的,但是随着计算机的发展,传到了其他国家,其他国家的一些字符并没有在这套编码方案内,当然也就无法显示和控制了。人们就想起了剩下的那 128 个没有使用的状态对目前的 ASCII码 进行扩展,这就是EASCII(Extended ASCII,延伸美国标准信息交换码)

EASCII码

EASCII码 有很多种,比较常见的有 CP437ISO/IEC 8859系列 。他共同特点就是前 128 位的状态和 ASCII码 是一样的。而后面的则根据不同的国家对应编不同的字符,这样就解决了很多国家的字符编码问题。但是到了亚洲大多采用表意文字,比如汉字多达几千上万的字符,这样这套编码方案就又不能适应了。所以就又出现了其他的编码方案,例如中文编码方案 GB2312GBK 等等各种不同的编码方案。下面以GB2312为例讲解这类编码方案。

GB2312

由于汉字众多,单字节的状态位已经不够用,所以中国人老实不客气的在加一个字节这样 2 个字节 16 位,最多就可表示 2^16 = 65536 个状态。GB2312 是基于区位码设计的,区位码把编码表分为 94 个区,每个区对应
94 位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般用十进制数来表示,如 1601 就表示 161 位,对应的字符是"啊"。在区位码的区号和位号上分别加上 0xA0 就得到了 GB2312 的编码,比如字符"啊"的编码就是 0xB0A1GB2312简体中文编码表。其中有很多的状态位是没有使用的,
GB2312 的编码范围是 0xA1A1~0xFEFE ,就算是这个编码范围内的也有很多是没有使用的。后来的 GBKGB18030 等都是在此基础上,又增添了其他的一些字符,这里不做具体叙述。

Unicode

随着越来越多的编码方案出现,相互之间的交流变得复杂起来。这时 Unicode出现了,Unicode字符表它把世界上所有的字符都对应起来一个编码。但 Unicode 仅仅只是一个字符集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何编码存储。后续对此字符集进行编码,提出了不同的编码方案,其中有 UTF-8UTF-16UTF-32。下面以 UTF-8 为例讲解。

UTF-8

UTF-8(Unicode Transformation Format - 8)UTF-8 使用的是变宽编码,不像上面提到的,说是一个字节或两个字节的长度,则所有的字符都是那么长。
UTF-8 占用最小占用 1 个字节,最大占用 6 个字节。编码方式为:

字符代码的二进制位 字节1 字节2 字节3 字节4 字节5 字节6
0~7 0xxxxxxx
8~11 110xxxxx 10xxxxxx
12~16 1110xxxx 10xxxxxx 10xxxxxx
17~21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
22~26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
27~31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

举例来说明一下,Unicode 中字符代码 90(字符为" Z ") 的二进制码为1011010 7位,这对应的编码就是一个字节长度,01011010Unicode
中字符代码 5073(字符" Ꮡ ") 的二进制码为 1001111010001 13位 的则需要用三个字节。编码后为11100001 10001111 10010001

总结

ASCII码 这些,既是字符集,又是编码方案,而 Unicode 仅仅是一个字符集,并不是一个编码方案。我们最常用的编码方案就是 ASCII码UTF-8。而大多数的编码方案都是兼容 ASCII码 的。这里只是在众多的编码方案中,挑出几种来介绍,如果对其他的一些编码方案感兴趣,可以自己再去查阅有关资料。这是一系列文章的其中一篇,你可以在这儿Encode & Decode集序找到他其他的兄弟。

参考

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

推荐阅读更多精彩内容

  • 0 前言 在平时的开发过程中大部分人应该都遇到过中文乱码问题,浏览网页时也会遇到内容显示乱码的情况,一般遇到这种情...
    小猪啊呜阅读 2,537评论 1 10
  • 在北京,参加云教育为主题的云思维研讨会。什么是云教育呢?稍微总结了一下,明天继续。 全才版云教育概念:云教育是用各...
    真灵阅读 436评论 0 0
  • 我好久都没有做梦了。 好久,至少八九个月。 来深圳之后,就没有做过梦。永远燥热的温度,无论冬夏;永远吵闹的邻居,无...
    芳宝落落阅读 260评论 0 2