在做语料清洗的时候经常需要处理各种字符编码,借此讨论和梳理一下常用编码方式

编码方式的类别

常用编码方式通常分为以下几类:

  • 字符编码(如UTF-8、ASCII)
  • 数据编码(如Base64、URL编码)
  • 音频视频编码(如MP3、H.264)
  • 压缩编码(如ZIP、GZIP)

字符编码

常见的字符编码方式有:ASCII、GB2312、GBK、GB18030、UTF8。 目前用的比较多的是GBK和UTF8(大多数网页采用的是UTF8编码,所以网页源码一般都有<meta charset="UTF-8">的标签)。

常见字符编码方式

下面按照时间线对几种常见的字符编码方式进行介绍:

  • 1963年:ASCII

    • 发明国家:美国
    • 发明人:Robert W. Bemer、John McCarthy等
    • 编码长度:8位
    • 原因:为了解决计算机之间数据互换的问题,需要制定一个统一的字符编码方案。
    • 主要用途:表示英文字母、数字、标点符号等基本字符
  • 1977年:Base64

    • 发明国家:美国
    • 发明人:Joseph L. Yarbrough
    • 编码长度:6位
    • 原因:二进制数据在不同系统之间传输时可能会出现乱码,需要一种编码方式将二进制数据转换为文本形式。
    • 主要用途:将二进制数据编码成文本,主要用于电子邮件、HTTP、MIME等协议中传输二进制数据

    严格来讲,Base64并不是一个字符集或字符编码,而是一种加密方式,用于将二进制数据转换为可打印字符的文本表示,便于在网络上进行传输。它并没有包含字符集的概念,而是将二进制数据表示为一组64个可打印的ASCII字符。

  • 1980年代初:GB2312

    • 发明国家:中国
    • 发明人:国家标准总局
    • 编码长度:16位
    • 原因:为了解决中国计算机之间中文数据互换的问题,需要制定
    • 主要用途:表示中文字符,是中文字符编码的一种
  • 1984年:Big5

    • 发明国家:中国台湾
    • 发明人:台湾计算机公司(TCA)
    • 编码长度:16位
    • 原因:为了解决台湾计算机之间繁体中文数据互换的问题,需要制定一个统一的字符编码方案。
    • 主要用途:表示繁体中文字符,广泛用于中国台湾等地
  • 1987年:ISO-8859-1(Latin-1)

    • 发明国家:国际标准化组织(ISO)
    • 发明人:ISO完成的。因此,并没有特定的个人被明确指定为ISO-8859-1的发明人
    • 编码长度:8位
    • 原因:为了满足西欧、拉丁美洲和东欧等多种语言的需求,需要一种新的字符编码方案。
    • 主要用途:表示西欧语言字符,是ISO-8859系列的一部分
  • 1991年:Unicode

    • 发明国家:美国

    • 发明人:Unicode联盟(Unicode Consortium)

    • 编码长度:取决于具体的编码方式,如UTF-8、UTF-16、UTF-32等

      所以注意理清关系,这里的关系是,UTF-8、UTF-16、UTF-32是Unicode的几种实现方式

    • 原因:为了能够容纳世界上所有文字和符号,需要制定一个新的字符编码方案。

    • 主要用途:为解决字符集的全球化而设计,包含几乎所有世界上的字符,用于在计算机系统中表示文本。

  • 1991年:UTF-16

    • 发明国家:美国
    • 发明人:Unicode联盟(Unicode Consortium)
    • 编码长度:16位
    • 主要用途:Unicode字符编码,包括辅助平面字符
  • 1992年:UTF-8

    • 发明国家:美国
    • 发明人:Kenneth Thompson、Rob Pike、Joe Darcy等
    • 编码长度:8位
    • 原因:为了提高Unicode的存储效率,需要一种更紧凑的编码方式。
    • 主要用途:Unicode字符编码,兼容ASCII,可变长表示字符
  • 1995年:GBK(Guo Biao Kangxi)

    • 发明国家:中国
    • 发明人:国家标准总局
    • 编码长度:16位
    • 原因:为了支持所有汉字,需要一种新的字符编码方案。GB2312无法表示所有汉字,需要一种新的字符编码方案来支持所有汉字。
    • 主要用途:中文字符编码,是GB2312的扩展,包含更多的汉字和符号,广泛用于中文环境中
  • 1996年:UTF-32

    • 发明国家:美国
    • 发明人:Unicode联盟(Unicode Consortium)
    • 编码长度:32位
    • 原因:Unicode可以使用多个字节来表示字符,在某些情况下会导致存储空间浪费。为了提高Unicode的存储效率,需要一种更紧凑的编码方式。
    • 主要用途:Unicode字符编码,UTF-32主要用于需要精确表示字符的场合
  • 2000年:GB18030

    • 发明国家: 中国
    • 发明人: 国家标准总局
    • 编码长度: 变长,可以是1、2、3、或4个字节
    • 原因:为了支持所有汉字,需要一种新的字符编码方案。GB2312和GBK无法表示所有汉字,需要一种新的字符编码方案来支持所有汉字。
    • 主要用途:用于中文字符编码,是GB2312、GBK的扩展,支持更多的汉字和特殊字符。它也兼容Unicode

常见字符编码的比较

这里比较一下几种字符编码方式,如下

image-20241009145659223

字符编码的兼容性

国标GB编码和UTF8互相不兼容。ASCII编码几乎被世界上所有编码所兼容,除了UTF16和UTF32编码。更具体的见下图:

image-20241009151944409

字符编码识别工具

鸣谢

Comments

2024-10-09

⬆︎TOP