分享

计算机世界的字符编码扫盲

 昵称11935121 2018-07-21

在开始之前,我们先来搞清楚几个概念。

  • bit(位)亦称二进制位,指二进制中的一位,是信息的最小单位。

  • Byte(字节)通常用作计算机信息计量单位,不分数据类型。是现代计算机中连续的、固定数量的比特(二进制),即八个比特为一字节。

  • 字符就是计算机上直观显示出来的比如汉字、字母、标点符号等。

ASCII

因为计算机是美国人发明的,发明之初他们并没有考虑其他语言编码的问题,所以只发明了 ASCIIAmerican Standard Code for Information Interchange,从名字也可以看出,它只是美国标准编码。

英文只有26个字母,算上大小写52个,再加上各种特殊字符和标点符号,一共128个注:asciitable,所以美国人只用一个字节来编码。1Byte = 8bit,最多可以表示256种不同的字符。

EASCII

EASCII(Extended ASCII)则是对ASCII的一种扩展,当计算机发展到西欧的时候,很多字符在ASCII中是不存在的。ASCII本来只用到了7bit的空间,EASCII则扩充到8bit,用来表示希腊字母,特殊的拉丁字母,计算符号等。它完全兼容ASCII。然而EASCII没有统一的标准,大家各自把高位按照自己的标准实现了编码。

GB2312

说到汉字,中文跟英文完全是不同的语系。英文可以由26个字母组成千变万化的单词句子。而中文则是由大几万个汉字组成,即使是常用字,也有几千个。ASCII只能表示256种不同的字符,于是聪明的中国人发明了GB2312编码,GB是国标的大写首字母。每个汉字及符号以两个字节表示。

GBK

尽管GB2312已经可以满足计算机大部分处理汉字的需求,然而还是不能百分百的表示全部的汉字,比如一些罕见的繁体字,后来在GB2312的基础上扩展收录了藏文,蒙文,维吾尔文等主要少数民族的文字,形成GBK编码。GBK同时兼容ASCII编码。

Unicode

尽管咱们汉字的编码问题解决了,可是每个国家都用自己的编码,那还怎么在互联网的世界相互交流。全世界所有的文字加起来怎么也得有几十万了,远远超出ASCII或GBK所能表示的范围,毕竟GBK也只能表示2^16=65536种字符。于是,国际标准化组织(International Organization for Standardization,ISO)在1984年联合国际电工委员会(International Electrotechnical Commission,IEC)成立了ISO/IEC小组,专门解决统一编码的问题。后来统一码联盟协同ISO/IEC,于1991年发布了Unicode的第一个版本。不过第一个版本并不包含CJK(中日韩大写英文首字母)字符。目前已发展到V4版本Unicode Tables v4。Unicode展示为 U + 码位的十六进制,比如呵这个汉字表示为\u5475。

UTF-8

虽然Unicode统一了全世界的字符编码标准,但是它的编码方案有两种: UCS-2和UCS-4。即大部分字符用2个字节表示,一些生僻字符则用4个字节表示。这样就出现一个问题,假如一个文件只包含基本的ASCII字符,则会造成巨大的空间浪费。Unicode只统一了编码标准,并没有统一如何存储,传输这个编码。于是,UTF(Unicode Transformation Format)标准出现了。UTF-8(8-bit Unicode Transformation Format)是一种可变字节编码,实际上是对Unicode字符集码位的再编码。

UTF-8编码规则

  • 128个ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)

  • 拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母需要二个字节编码(Unicode范围由U+0080至U+07FF)

  • 大部分国家的常用字(包括中文)使用三个字节编码

  • 其他极少使用的生僻字符使用四字节编码

从规则中可以看出,这样就解决了空间浪费的问题,但解决的是使用26个英文字母国家的问题,咱们的问题似乎更严重了。大部分汉字占3个字节,少部分占4个字节。本来使用GB2312或者GBK编码,每个汉字只占2个字节的。所以现在这两种编码仍然广泛使用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多