K.I.S.S---Keep IT Simple,Stupid!    人生苦短,我用Python

常见的字符集编码方法都有哪些?一文说懂ASCII,GBK,GB2312,UTF-8,Unicode等

 
分类: 问答 2024年2月8日
简介:常用编码方式分为两类:一、音视频编码;二、字符集编码。音视频编码主要有:1、非压缩编码(PCM);2、压缩编码。字符集编码有:1、ASCII码;2、GB2312;3、GBK等。非压缩编码(PCM)是指,一种将模拟语音信号变换为数字信号的编码方式。

我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有01两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000011111111

字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。常见的字符编码方式有: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等协议中传输二进制数据。
  • 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等
    • 原因:为了能够容纳世界上所有文字和符号,需要制定一个新的字符编码方案。
    • 主要用途:为解决字符集的全球化而设计,包含几乎所有世界上的字符,用于在计算机系统中表示文本。
  • 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。

PS: 

Base64并不是一个字符集或字符编码,而是一种编码方式,用于将二进制数据转换为可打印字符的文本表示。它并没有包含字符集的概念,而是将二进制数据表示为一组64个可打印的ASCII字符。

 

以下是这些字符集编码方法的比较:

字符集编码方法 特点 适用范围
ASCII 简单,兼容性好 英文文本
Unicode 通用,可以容纳世界上所有文字和符号 所有语言文本
UTF-8 通用,兼容性好,是目前使用最广泛的字符编码方案 所有语言文本
GB2312 简体中文 简体中文文本
GBK 简体中文,兼容GB2312 简体中文文本
Big5 繁体中文 繁体中文文本

编码的兼容性

编码之间的兼容性如下图所示[1],国标GB编码和UTF8互相不兼容,这也就是为什么日常会看到文件的乱码:通过UTF8的编码方式打开国标GB编码的文件,或用国标GB的编码方式打开UTF8编码的文件。

ASCII编码几乎被世界上所有编码所兼容,除了UTF16和UTF32编码[1]。




注:当前文章会不定期进行更新。如果您对本文有更好的建议,有新资料推荐, 可以点击: 欢迎分享优秀网站
这个位置将来会放广告

我想等网站访问量多了,在这个位置放个广告。网站纯公益,但是用爱发电服务器也要钱啊 ----------狂奔的小蜗牛