计算机的信息-编码

计算机编码

​ 计算机编码是指将信息转换为计算机可以理解和处理的数字形式的过程。这个过程涉及使用特定的编码系统,将字符、符号、图像或其他数据类型转换为二进制形式(0和1的组合),以便计算机能够读取、存储和处理这些数据。

​ 通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致’a’解析成’b’或者乱码。

基础知识

字符集(Charset): 字符集就像一个大杂货店,里面装满了各种各样的文字、符号、数字等。不同国家的文字、标点符号,甚至图案都在这个“杂货店”里。

字符编码(Character Encoding): 字符编码就是一种翻译规则,它帮助计算机理解人类使用的文字。我们人类使用的文字,比如字母、数字,通过字符编码变成计算机能看懂的数字语言。

常见字符集名称: 就好比各种不同口味的零食,有辣的、甜的、酸的,计算机也能处理各种“口味”的文字。比如ASCII字符集、GB2312字符集、BIG5字符集,它们就是这个“杂货店”里的一些特色区域。计算机需要字符编码,就像是学会了各种零食的制作方法,才能准确地处理和享用这些文字零食。

**信息在计算机中是如何表示:**计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。

ASCII字符集

(American Standard Code for Information Interchange)码的历史可以追溯到20世纪60年代初。

以下是ASCII码的主要历史阶段:

  1. 提出和制定(1960s): ASCII的发展始于20世纪60年代初。当时,美国国防部的一位工程师罗伯特·威登(Robert W. Bemer)提出了制定一个标准字符编码的想法,以促进计算机间的数据交换。在此基础上,美国国家标准协会(ANSI)成立了一个委员会,负责制定这一字符编码标准。
  2. 标准化过程(1963-1967): ASCII标准的制定历时几年。在标准化的过程中,参与制定的专家们考虑了当时计算机系统的需求,以及能够满足英语和其他常见字符需求的方式。最终,于1967年制定了ASCII的第一个版本,定义了128个字符。
  3. 初始版本(1967): 初始的ASCII版本包含了基本的拉丁字母、数字、标点符号等,用7位二进制数表示一个字符。这个版本没有包括扩展ASCII中的额外128个字符。
  4. 扩展ASCII(1980s): 随着计算机技术的发展和对更多字符的需求,扩展ASCII应运而生。扩展ASCII使用8位二进制数表示一个字符,允许表示256个不同的字符,包括特殊符号、各国语言的字符等。
  5. 国际标准化(1986): ASCII被国际标准化组织(ISO)采纳为ISO 646标准,进一步推动了其在国际范围内的应用。
  6. ASCII的遗产: 尽管现代计算机系统更多地使用Unicode等字符编码,ASCII仍然是计算机编码历史上的重要里程碑,为字符编码的发展奠定了基础。

在这里插入图片描述

Unicode字符集

Unicode的诞生是为了解决计算机领域中字符编码的问题,特别是对不同语言和文化的字符进行统一和标准化。

在早期计算机时代,不同的计算机和操作系统使用不同的字符编码方案。这导致了在不同系统之间共享文本和数据时的兼容性问题,特别是对于使用非拉丁字母的语言。

Unicode 当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字严。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表

如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode是一个符号集,它规定了各种字符的二进制代码,但并没有规定这些二进制代码应该如何在计算机中存储。这带来了两个问题。

第一个问题是,不同字符可能需要不同长度的二进制代码表示。比如,汉字"严"在Unicode中的代码是4E25,对应的二进制是15位长。这就意味着,有的字符可能需要2个字节来表示,而有的可能需要3个、4个字节,甚至更多。计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?

第二个问题是,如果Unicode规定每个符号都用相同的固定长度的字节表示,比如3个或4个字节,那就会浪费存储空间。比如,英文字母只需要一个字节表示,但如果规定每个符号都用3个或4个字节,那么每个英文字母前都必然有很多个字节是0,这样就浪费了存储空间,文本文件的大小也会因此变得很大。

为了解决这些问题,出现了Unicode的多种存储方式,也就是说有不同的二进制格式来表示Unicode。这样,计算机就可以根据具体的存储格式来正确地解释文本中的字符。这种灵活性使得Unicode能够适应不同的需求和环境。

然而,由于这些复杂性,Unicode在很长一段时间内无法广泛推广,直到互联网的普及才使其成为计算机领域中的主流字符编码标准。

UTF-8

随着互联网的普及,人们急需一种能够统一表示各种语言字符的编码方式。在这个需求下,UTF-8成为了互联网上使用最广泛的Unicode实现方式。不同于其他实现方式如UTF-16和UTF-32,UTF-8以其灵活性和高效性在互联网环境中脱颖而出。

UTF-8最显著的特点是它是一种变长的编码方式。这意味着它可以用1到4个字节来表示一个符号,具体的字节长度根据符号的不同而变化。为了更好地适应不同语言和字符的表示,UTF-8的变长设计使得它成为了一种相对节省存储空间的编码方式。

简而言之,UTF-8是Unicode的一种实现方式,而它的变长设计使得它在互联网上能够高效地表示和传输各种字符,无论是英文字母还是复杂的汉字。这种灵活性让UTF-8成为了互联网上最受欢迎的字符编码方式之一。

UTF-8是一种可变长度的字符编码方式,用于表示Unicode字符集中的字符。其实现逻辑如下:

  1. 基本原理: UTF-8的基本思想是通过不同长度的字节序列来表示不同范围的字符。对于英文字符和一些常用符号,使用一个字节即可表示;对于其他字符,采用多字节表示。

  2. 字符的编码范围: UTF-8规定了字符的编码范围,根据字符的Unicode编码来决定采用几个字节表示。以下是UTF-8编码的字符范围:

    • 单字节编码:0x00 - 0x7F(0-127)
    • 双字节编码:0x80 - 0x7FF(128-2047)
    • 三字节编码:0x800 - 0xFFFF(2048-65535)
    • 四字节编码:0x10000 - 0x10FFFF(65536-1114111)
  3. 字节的格式: UTF-8的字节格式如下:

    • 单字节字符:最高位为0,后面7位表示字符的Unicode码。
    • 双字节字符:最高位为110,接着两个位表示字符的高5位Unicode码,后面5个位表示低6位Unicode码。
    • 三字节字符:最高位为1110,接着三个位表示字符的高4位Unicode码,后面9个位表示低6位Unicode码。
    • 四字节字符:最高位为11110,接着四个位表示字符的高3位Unicode码,后面13个位表示低6位Unicode码。
  4. 例子: 让我们以汉字“严”(Unicode编码为4E25)为例,看看它在UTF-8中如何表示:

    • 4E25的二进制表示:100111000100101
    • 由于它在Unicode的三字节范围内,所以UTF-8表示为:111001001001110010010101(高四位与Unicode高位对应,后面六位与Unicode低位对应)

    最终的UTF-8表示为:11100100 10011100 10001010,分别是三个字节。

这样,UTF-8通过灵活的变长设计,可以高效地表示Unicode字符集中的各种字符,同时节省存储空间,使其成为互联网上广泛应用的字符编码方式。

GBK字符集

在计算机问世初期,主要应用于美国和一些西方发达国家。由于ASCII字符集能够满足英文和一些西方语言的需求,这个字符编码在初期应用中表现得相当出色。

然而,当计算机技术传播到其他国家,就出现了一个问题:ASCII无法满足中文字符的需求。因此,为了在计算机中显示中文,咋们的专家们必须设计一种新的编码规则。

大佬们进行了改进,取消了ASCII字符集中127号之后的一些奇异符号(即EASCII)。然后,他们规定,一个小于127的字符的意义与原来相同。而当两个大于127的字符连在一起时,就表示一个汉字。具体地,规定了一个汉字用两个字节表示:高字节的范围从0xA1到0xF7,低字节的范围从0xA1到0xFE。这样的设计允许表示大约7000多个简体汉字。

在这个新的编码中,不仅包括了中文字符,还编码了数学符号、罗马希腊字母、日文假名等。甚至原本在ASCII字符集中的数字、标点、字母也都重新编码成两个字节长的形式,被称为“全角”字符,而原来在127号以下的那些字符则被称为“半角”字符。

这种编码方式的出现为中文计算机应用创造了可能,使得计算机能够更好地处理和显示中文字符。这也是中国计算机领域中的字符编码历史的一部分。

GB系列字符集和编码是中国在计算机领域中的一系列标准,主要用于表示中文字符。以下是GB系列的发展史:

  1. GB2312(1980年代): GB2312是中国国家标准中的一种字符集和编码方式,于1981年发布。它最初包含6763个常用汉字和682个非汉字字符,采用双字节编码方案,为中国计算机领域中的中文字符表示提供了一种标准。GB2312的出现标志着中国开始在计算机领域建立自己的字符编码标准。
  2. GBK(1995年): 随着计算机技术的发展和对更多汉字的需求,GB2312逐渐显得不够用。因此,1995年发布了GBK(Guojia Biaozhun Kuozhan),即国标扩展,它对GB2312进行了扩展,包含了21003个汉字和少量其他字符,使用双字节编码。GBK向下兼容GB2312,使得原来使用GB2312的系统可以无缝过渡到GBK。
  3. GB18030(2000年): GB18030是中国国家标准发布的一个更为全面的字符集和编码标准,于2000年发布。它包含了70000多个字符,涵盖了中文、中日韩统一表意文字、中亚字符等多个领域。GB18030采用了多字节编码方案,可以表示1至4个字节长度的字符。
  4. GB/T 13752(1992年)和GB/T 12345(1990年): 这两个标准定义了中国国家标准的简体字和繁体字的对应关系,用于在简体字和繁体字之间的相互转换。

Big5字符集

Big5,又称为大五码或五大码,是使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。中文码分为内码及交换码两类,Big5属中文内码,知名的中文交换码有CCCII、CNS11643。Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并非当地的国家标准,而只是业界标准。倚天中文系统、Windows等主要系统的字符集都是以Big5为基准,但厂商又各自增加不同的造字与造字区,派生成多种不同版本。2003年,Big5被收录到CNS11643中文标准交换码的附录当中,取得了较正式的地位。这个最新版本被称为Big5-2003。

Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。第一个字节称为"高位字节",第二个字节称为"低位字节"。"高位字节"使用了0x81-0xFE,"低位字节"使用了0x40-0x7E,及0xA1-0xFE。

小结:

Unicode、GBK和Big5是字符集,而UTF-8、UTF-16、UTF-32等是字符集的具体编码格式。这些编码格式定义了如何将字符集中的字符映射到计算机内部的二进制表示,以便存储和处理。

Unicode比GBK的字符集范围大

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小庄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值