编码方式
在做语料清洗的时候经常需要处理各种字符编码,借此讨论和梳理一下常用编码方式
编码方式的类别
常用编码方式通常分为以下几类:
- 字符编码(如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。
常见字符编码的比较
这里比较一下几种字符编码方式,如下
字符编码的兼容性
国标GB编码和UTF8互相不兼容。ASCII编码几乎被世界上所有编码所兼容,除了UTF16和UTF32编码。更具体的见下图:
字符编码识别工具
- 快速且准确的中文编码检测工具:https://github.com/alanshi/charset_mnbvc