编码——知识补充

编码——知识补充

一、中文编码

        一说到中文就得提到两个标准:GB和GBK。GB是中国国家标准(GuoBiao)的缩写,在1980年由中国国家标准化管理委员会(SAC)制定,具体的标准有GB2312。而GBK(全称GuoBiaoKuozhan)国标扩展,在1995年被提出,是对 GB2312 的扩展。它支持21,003个汉字及符号,其中包括繁体字和部分日文假名。GBK 使用双字节编码,兼容 GB2312。

        还有GB18030和Big5。GB18030是对 GB2312 和 GBK 的进一步扩展,在2000年被提出。它支持 21,003 个汉字及符号,使用单字节、双字节和四字节编码,完全向后兼容 GB2312 、GBK和Unicode(没错,它能表示Unicode中的全部字符)。它覆盖了简体字、繁体字及其他语言字符,成为中国大陆的强制性标准。另外还有Big5 编码,它在1984年由台湾五家主要计算机公司(联华电子、宏碁、台湾惠普、神通计算机和台湾大哥大)联合提出,故名 "Big5"。它包含 13,053 个汉字,主要覆盖繁体中文字符。使用双字节编码。每个字符由两个字节表示,第一个字节(称为高字节)范围从 0xA1 到 0xF9,第二个字节(称为低字节)范围从 0x40 到 0x7E 和 0xA1 到 0xFE。如果你windows系统选择的语言是繁体,那么在你记事本的下拉选项中ANSI就变成Big5了。

        所以几种常见的编码关系如下图。这里需要说明的是,虽然Unicode也包含所有的汉字,而GB18030也兼容Unicode,但是同一个字符在GB18030和Unicode中的编码基本上是不一样的,只有ACSII部分是完全相同的。

关于GB2312、GBK、GB18030的更详细的介绍可以参考这篇文章:程序员必备:彻底弄懂常见的7种中文字符编码 - 知乎 (zhihu.com)

二、一些奇怪的点

        在这里补充为什么计算机硬件通常以8个比特当作1字节为单位进行数据的存储和操作和ASCII码为什么采用8位比特而不是7位比特。

1.计算机硬件通常以8个比特当作1字节

1)历史和标准化

  • 早期计算机设计:在计算机发展的早期,不同的计算机系统使用不同的字长(如 6 位、12 位、18 位等)。但是,随着计算机技术的发展和标准化的需求,8 位的字节成为一种广泛接受的标准。
  • 标准化:在 20 世纪 60 年代,IBM 推出的 System/360 系列计算机采用 8 位字节作为标准,这对整个计算机行业产生了深远影响。8 位字节逐渐成为标准单位,便于硬件和软件之间的兼容和互操作。

2)字符编码需求

  • ASCII 编码:标准的 ASCII 编码使用 7 位来表示字符,但通常存储在 8 位(1 字节)中。这样不仅符合 8 位字节的存储单元,还为未来的扩展字符集(如扩展 ASCII)提供了空间。
  • 其他字符集:许多其他字符集(如 EBCDIC)和早期的多种字符编码方案都采用了 8 位编码。

3)硬件设计的简化

  • 内存寻址:使用 8 位字节作为最小单位可以简化内存寻址和数据存储设计。每个地址对应一个字节,简化了地址计算和内存管理。
  • 数据总线:8 位的数据总线设计使得硬件设计更加简单和高效。数据总线的宽度通常是 8 位的倍数(如 16 位、32 位、64 位),这便于数据传输和处理。

4)计算效率

  • 指令集设计:计算机指令集设计中,操作字节(8 位)数据比处理其他非标准长度的数据更有效率。许多基本数据类型(如整数、浮点数)的长度也是 8 位的倍数。
  • 内存对齐:内存对齐优化能够提高数据访问速度。以字节为单位的数据对齐可以减少存储器访问时间,提升系统性能。

5)灵活性和扩展性

  • 灵活性:8 位字节作为最小存储单位,可以灵活地组合成各种数据类型(如 16 位的 short,32 位的 int,64 位的 long long)。
  • 扩展性:8 位字节便于扩展字符集和编码方案,如 UTF-8 编码使用 1 至 4 个字节表示不同字符,提供了极大的灵活性和兼容性。

6)实践和经济性

  • 硬件成本:8 位字节的设计平衡了存储效率和硬件成本。设计和制造8位字节存储单元的硬件成本相对较低。
  • 存储效率:在内存和存储器价格较高的早期,8 位字节可以在有限的硬件资源下提供足够的存储能力和数据处理能力。

        所以计算机硬件以字节(8 位)为单位进行数据存储和操作,是历史演进、标准化需求、硬件设计优化、计算效率提升和实践经济性等多种因素共同作用的结果。8 位字节不仅适应了早期的字符编码需求,也为现代计算机系统提供了灵活性和扩展性,使其成为计算机存储和处理的基础单位。

2.ASCII码采用8位比特而非7位比特

1)字节(8 位)是计算机最小的可寻址单元:

        计算机硬件通常以字节(8 位)为单位进行数据的存储和操作。尽管 ASCII 只需要 7 位来表示字符,但计算机的存储和处理是以字节为基本单位的,因此实际存储一个 ASCII 字符需要使用 1 个字节(8 位)。

2)扩展 ASCII 的兼容性:

        在 ASCII 标准制定时,考虑到了未来可能的扩展。在实际应用中,最左边的第 8 位(最高位)通常用于多种目的,比如:

  • 校验位(用于检测数据传输中的错误)
  • 扩展字符集(扩展 ASCII):
  • 扩展 ASCII 使用 8 位来表示字符,增加了 128 个字符(从 128 到 255),涵盖了更多的符号、图形字符以及其他语言的字符。

3)硬件设计的简化:

        使用 8 位(1 字节)来存储 ASCII 字符,可以简化硬件设计和数据处理。早期计算机和通信设备设计时,使用 8 位的数据总线和存储单元是最经济和高效的选择,统一使用 8 位也便于硬件制造和标准化。

4)兼容性和标准化:

        通过使用 8 位来存储字符,可以确保 ASCII 编码与其他编码系统(如 EBCDIC、扩展 ASCII)兼容,便于在不同系统之间交换数据。

示例

        以字母 "A" 为例,其 ASCII 码是 65,对应的二进制表示是 1000001(7 位)。但在计算机中,实际存储时会使用 8 位表示,即 01000001(在左边添加一个 0 作为填充)。

        虽然 ASCII 码本身是 7 位二进制数,但实际存储和处理时使用的是 8 位(1 字节)。这是由于计算机系统的存储单元设计、未来扩展的需要、硬件设计的简化以及数据传输的可靠性考虑。这样不仅满足了当时的需求,也为未来的扩展和兼容性提供了保障。

        而计算机硬件以字节(8 位)为单位进行数据存储和操作,既是因为 8 位的设计在技术实现上合理有效,也因为字符编码(如 ASCII)采用了 8 位比特来表示字符,这两者之间存在相互影响和推动的关系。

三、使用Unicode私人使用平面定制字体

        这个原理其实就是将你自己设计的符号用Unicode提供的私人使用平面中的其中一个代码点表示。这里介绍我觉得最简单的一种方法。

        1.第一步肯定就是创建符号了。可以使用windows自带的专用字符编辑程序。按“win”键打开开始界面,找到收索,在里面输入“专用字符编辑程序”出来的第一个就是了。

        2.之后选择你想用哪个代码点进行字符设计,我选择的是“E010”,然后绘制一个你喜欢的图案,保存即可。

        3.其实这里就已经设计好了,可以选择在html网页中查看验证一下。

        新建一个txt文件,将以下代码复制在里面后保存。再将.txt后缀名改为.html,双击之后就可以在浏览器里显示出来啦。

<!DOCTYPE html>

<html>

<head>

    <title>私人使用区域示例</title>

    <meta charset="UTF-8">

</head>

<body>

    <p>我的自定义符号:&#xE010;</p>

</body>

</html>

        可以发现这个奇怪的符号也是成功显示出来了。另外不仅可以使用Unicode提供的私人使用平面,还可以使用GBK的代码点。只需在编码类型的下拉框里选择ChineseGBK即可。

        如果想在其他的文本编辑软件中也显示出来,则需要将两者编码类型保持一致,比如我想在word里显示这个字,就把word编码也使用Unicode就行了。

        好了,到此本篇对于编码知识的补充就到此结束了,我对编码知识的探索也暂告一段落。

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值