zoukankan      html  css  js  c++  java
  • 计算机字符编码编年史

    计算机字符编码编年史

    标签(空格分隔): Java基础


    话说字符编码

    各种各样的编码标准搞得头大,哪哪分不清。so,想按照字符编码出现的时间顺序做一个梳理。

    1.ASCII

     ASCII,American Standard Code for Information Interchange,美国信息交换标准代码.
     由电报码发展而来。

    1. 1963年发布第一版标准
    2. 1967年经历了一次主要修订
    3. 1986年进行了最后一次更新
      至今为止共定义了128个字符;

    其中33个字符无法显示,95个可显示的字符

      

    ASCII的缺点

    ASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数字和英式标点符号,因此只能用于显示现代美国英语

    2.ANSI

    老美发明计算机,ASCII编码就满足使用了。但是计算机这么好的东西,世界人民都想使用,但是128个字符毛毛雨啊,完全不够用。so,开始各显神通,编码标准进入ANSI阶段

    先来介绍下ANSI编码标准所规定的内容包含的含义:

    1. 使用那些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”
    2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”
      接着来看下国内是如何制作编码标准的,前后经历了那些标准?

    中国大陆的ANSI

    1. GB 2312-1980
      GB2312发布于1980年,通用于中国大陆,新加坡等地也采用此编码。
    2. GB 13000-1993
      第一次颁布是在1993年
    3. GBK
      《汉字编码扩展规范》(GBK)发布于1995年。GBK与GB 2312兼容。
    4. GB 18030-2000
      国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》,2000年发布
      完全兼容GB 2312,与GBK基本向后兼容,完全支持unicode.
    5. GB 18030-2005
      GB18030-2005《信息技术中文编码字符集》是我国制订的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个

    中国港澳台

    Big5,1983年发布繁体中文通行区。

    3.Unicode

    ANSI可谓编码界的战国时代,你搞你的,我搞我的。
    中国有GBxxx,Big5
    日本有Jis
    英文有ASCII
    ...
    不同的字符集标准是不能再多语环境下正常解析的。乱码是个大问题。
    so,一个大一统的编码标准应运而生-Unicode
    Unicode (万国码、国际码、统一码)。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字

    Unicode与 ISO的故事

    位于美国加州的Unicode组织允许任何愿意支付会费的公司和个人加入,其成员包含了主要的电脑软硬件厂商,例如Adobe系统、苹果公司、惠普、IBM、微软、施乐等。
    
    20世纪80年代末,组成 Unicode
    组织的商业机构,和国际合作的国际标准化组织因为电脑普及和信息国际化的前提下,
    分别各自成立了 Unicode 组织[3]和 ISO-10646 工作小组。他们不久便发现对方的存在,大家为着相同的目的而工作。1991 
    年,Unicode Consortium 与 ISO/IEC JTC1/SC2 同意保持 Unicode 码表与 ISO 10646 标准保持兼容并密切协调各自标准近一步的扩展。虽然实际上两者的字集编码相同,但
    实质上两者确实为两个不同的标准。Unicode 1.1 对应于 ISO 10646-1:1993,Unicode 3.0 对应于 ISO 10646-1:2000,
    Unicode 3.2 对应于 ISO 10646-2:2001,Unicode 4.0 对应于 ISO 10646:2003,Unicode 5.0 对应于 ISO 10646:2003
    

    Unicode的问题

    Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

    比如,汉字的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

    这里就有两个严重的问题,第一个问题是,如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

    4.UTF-8

    互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式

    此外还有 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用

    5.总结

    几篇文章拼凑着看下来之后,对编码标准大致的有了一个了解。


    参考文献
    维基百科ASCII
    阮一峰的网络日志
    维基百科Unicode
    国标GBxxxxxx参考百度百科

    作者:往霄龙
    求其上者得其中,求其中者得其下
  • 相关阅读:
    js-link下载文件
    sql-优化建议
    Studio-环境变量设置
    Studio
    Docker下安装ElasticSearch和Kibana
    sklearn 中的 r2_score
    R语言将所有列数据正交化/缩放
    R语言 random forests out-of-bag prediction
    R语言 coalesce 函数
    R语言 case_when 函数
  • 原文地址:https://www.cnblogs.com/JQKA/p/12133453.html
Copyright © 2011-2022 走看看