位(bit)、字节(byte)、字、英文字符、中文字符的关系详解(涵盖字符编码)

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:C++专栏
  • 💥 标题:位(bit)、字节(byte)、字、英文字符、中文字符的关系详解(涵盖字符编码)
  • ❣️ 寄语:书到用时方恨少,事非经过不知难。
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

🎈在学习过程中位(bit)、字节(byte)、字、英文字符、中文字符这些概念在我脑海中一直很模糊,今天就在此回顾一下🎈

仅仅通过我这一篇文章可能大家还是对字符集和字符编码还是有点懵,所以下面我推荐几个视频,对字符集和字符编码的内容讲解的特别清晰,大家感兴趣可以再学习学习。
b站教程视频1
b站教程视频2

1 位、字节、字

  1. 位 bit
    位(bit)是计算机中最基本的信息单位,它可以表示二进制的0或1。一个位只能表示两种状态之一,通常用0表示假(False),用1表示真(True)。

  2. 字节 byte
    字节(byte)是计算机中常用的存储单位,它由8个连续的位组成。字节是计算机中最小的可寻址的存储单元,通常用于表示一个字符或其他小的数据单元。由于一个字节可以表示256(2^8)种不同的状态组合,因此可以表示的字符和数据范围广泛。


  3. 字(word)是一种存储单位,它由若干个字节组成,通常在计算机体系结构中定义了字的大小。字的大小可以是8位、16位、32位或更大,具体取决于计算机的设计。
    字在计算机中的作用是存储和处理数据。它可以表示整数、浮点数、字符或其他数据类型,具体取决于字的大小和计算机的架构。字的大小决定了计算机处理数据的能力和精度。较大的字可以存储更大范围的数值或更精确的浮点数,而较小的字则有限制。
    字的大小对计算机的性能和功能有重要影响。较大的字可以提高计算机的处理速度和效率,同时也提供了更丰富的数据表示能力。例如,现代计算机通常使用32位或64位的字来处理复杂的计算任务和存储大量的数据。

总结是最基本的存储单位字节是由8个位组成的常用存储单位是由若干个字节组成的存储单位,其大小取决于计算机的设计。用于表示最小粒度的数据,字节用于表示小的数据单元或字符(是计算机中最小的可寻址的存储单元),用于表示和处理更大范围的数据。

2 字符编码

把下面几个问题回答出来,也就知道字符编码的相关概念了。

2.1 字符集

字符集(Character Set)是一种规定了字符与数字之间的对应关系的编码系统。不同的字符集使用不同的编码方案,将字符映射为对应的数字值。常见的字符集包括:

  • ASCII(American Standard Code for Information Interchange):ASCII是最早的字符集之一,使用7位编码,包含了128个字符,包括英文字母、数字和一些常见符号。
  • ISO 8859:ISO 8859是一系列字符集标准,其中包括多个字符集,如ISO 8859-1(Latin-1)、ISO 8859-2(Latin-2)等。ISO 8859-1是Latin-1字符集,使用8位编码,包含了256个字符,包括ASCII字符和欧洲特定字符。
  • Unicode:Unicode是一种全球字符集标准,旨在包含世界上所有的字符。Unicode使用不同的编码方案,最常见的是UTF-8、UTF-16和UTF-32。
    • UTF-8是一种变长编码,可表示Unicode字符集中的任何字符,它在互联网上得到广泛应用。
    • UTF-16:UTF-16也是一种Unicode编码方案,使用16位编码表示字符,可以表示更广泛的字符集,包括一些较少使用的字符。
    • UTF-32:UTF-32是一种使用32位编码的Unicode编码方案,可以表示Unicode字符集中的任何字符,包括辅助平面字符。
      这些字符集在不同的编程语言和操作系统中有不同的支持和使用方式。在处理字符串时,需要根据字符集进行正确的编码和解码操作,以确保字符的正确表示和处理。

Unicode是一种字符集,它定义了世界上几乎所有字符的唯一标识符。每个字符都被赋予一个唯一的Unicode码点,用于表示该字符。Unicode解决了在不同国家和文化中使用的各种字符集之间的兼容性问题,为字符提供了统一的标准。

2.2 字符集与字符编码的关系

字符集(Character Set)和字符编码(Character Encoding)之间存在密切的联系。下面是它们之间的关系:

  • 字符集是一种规定了字符与数字之间对应关系的编码系统,它定义了一组字符及其对应的唯一编号。例如,ASCII字符集中的每个字符都有一个唯一的ASCII码。
  • 字符编码是实际将字符映射为二进制数据的方式。它定义了如何使用数字来表示字符。字符编码方案将字符集中的字符映射到具体的二进制值。
  • 字符集定义了一组字符,而字符编码定义了如何使用数字来表示这些字符。字符编码方案将字符集中的字符映射到二进制数据,以便在计算机系统中存储和处理。
  • 常见的字符编码方案包括ASCII、ISO 8859、Unicode等。ASCII字符集使用ASCII编码方案,将字符映射为7位二进制值。ISO 8859字符集系列使用不同的ISO 8859编码方案,将字符映射为8位二进制值。Unicode字符集使用多种编码方案,如UTF-8、UTF-16和UTF-32,将字符映射为不同位数的二进制值。
  • 在编程中,正确的字符编码非常重要,以确保字符的正确表示和处理。如果字符使用的编码方案与字符集不匹配,可能会导致乱码或字符无法正确解析。
  • 因此,在处理字符串时,需要明确字符集和字符编码的概念,并根据具体的编程语言和环境,选择适当的字符编码方案来确保字符的正确传输、存储和处理。

2.1 为什么要有字符编码

  • 在显示器上看见的文字、图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片。假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1,凹的地方代表数字0。
  • 问题:硬盘只能用0和1来表示所有文字、图片等信息。那么字母”A”在硬盘上是如何存储的呢?
    答案字符编码,就是解决字符是在计算机如何与二进制数对应的。 因为用户不可能去看一堆二进制数,那样还有翻手册查询,效率极低,所以就需要使用字符编码,将一堆灰色难懂的二进制数转换成字符,增加可读性。
  • 但是不同的国家有不同的语言,也就产生了不同的字符。所以就会产生不同的字符编码,也就会有不同的字符集和二进制码对应。
  • 所以可能出现小张计算机存储字母”A”是1100001,而小王存储字母”A”是11000010,这样双方交换信息时就会误解。比如小张把1100001发送给小王,小王并不认为1100001是字母”A”,可能认为这是字母”X”,于是小王在用记事本访问存储在硬盘上的1100001时,在屏幕上显示的就是字母”X”。
  • 也就是说,小张和小王使用了不同的编码表。小张用的编码表是ASCII,ASCII编码表把26个字母都一一的对应到2进制1和0上;小王用的编码表可能是EBCDIC,只不过EBCDIC编码与ASCII编码中的字母和01的对应关系不同。
  • 一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EBCDIC 编码。在发送数据给对方前,需要事先告知对方自己所使用的编码,或者通过转码,使不同编码方案的两个系统可沟通自如。

2.2 字符编码的种类有哪些

字符编码是将字符映射到数字代码的方法。以下是一些常见的字符编码标准:

  1. ASCII(American Standard Code for Information Interchange):ASCII是最早和最常用的字符编码标准,它定义了128个字符的编码,包括英文字母、数字和一些常见符号。
  2. Unicode:Unicode是一个更为全面的字符编码标准,目标是包含世界上所有字符的编码。它为每个字符分配了一个唯一的代码点,可以用不同的编码方式表示,如UTF-8、UTF-16和UTF-32。
  3. UTF-8:UTF-8是一种变长的Unicode编码方式,它使用1到4个字节表示不同的字符,能够表示Unicode字符集中的所有字符。
  4. UTF-16:UTF-16也是一种Unicode编码方式,使用2个或4个字节表示字符,可以表示大部分的Unicode字符。
  5. UTF-32:UTF-32是一种固定长度的Unicode编码方式,使用4个字节表示每个字符,能够表示Unicode字符集中的所有字符。

除了这些常见的字符编码标准外,还有其他一些编码方式,如ISO-8859系列、GB2312、GBK、Big5等,它们主要用于特定的语言或地区字符集。

  1. GB2312:GB2312是中国国家标准局发布的汉字字符集标准,用于表示简体中文字符。它包含了6763个常用汉字和682个非汉字符号。
  2. GBK:GBK是GB2312的扩展版本,也是中国国家标准局发布的字符集标准。GBK包含了GB2312中的字符,同时还增加了包括繁体中文、日文假名、韩文在内的其他字符。GBK能够表示大部分中文字符。
  3. Big5:Big5是台湾使用的汉字字符集标准,用于表示繁体中文字符。它包含了13060个汉字和符号。

拓展ISO-8859系列是一系列字符编码标准,也被称为Latin字符集。每个ISO-8859标准定义了一个字符编码表,用于表示不同语言中的字符。ISO-8859-1是最常用的标准,也被称为Latin-1,包括了西欧语言中的字符。其他ISO-8859标准如ISO-8859-2、ISO-8859-5等,分别适用于中欧、斯拉夫语言等特定语言字符集。

拓展:ANSI 编码

  • ANSI编码是一种字符编码标准,全称为"American National Standards Institute"(美国国家标准学会)。它定义了字符与二进制数字之间的对应关系,用于在计算机系统中表示和传输文本数据。ANSI编码最初是在美国使用的,后来也被广泛应用于其他地区和国家。
  • 在ANSI编码中,每个字符都被赋予一个唯一的数字代码,范围从0到255。这些代码可以表示各种字符,包括字母、数字、标点符号和特殊字符。常见的ANSI编码包括ASCII编码(其中0到127的范围与ASCII完全相同)和扩展ASCII编码(使用了0到255的完整范围)。
  • 需要注意的是,随着时间的推移,ANSI编码逐渐被更先进的字符编码标准所取代,比如Unicode。Unicode提供了更广泛的字符支持,可以表示世界上几乎所有的语言和符号。
  • 需要注意的是,ANSI编码并不是一个统一的标准,而是根据不同操作系统和语言环境的不同而有所调整。在不同国家和地区,ANSI编码可能有些许变化。
    • 在美国,“ANSI 编码” 通常指代 Windows-1252 编码,它是一个用于表示英文和西欧语言字符的8位字符编码。
    • 在中文环境中,“ANSI 编码” 通常指代 GBK(汉字内码扩展规范)编码或 GB2312(汉字内码扩展规范)编码。(但需要注意的是,ANSI编码并不能完全表示所有的中文字符,因为它的字符范围有限)
    • 在日本,“ANSI 编码” 可能指代 Shift_JIS 编码,它是一种用于表示日文字符的字符编码。

总结:相对于ANSI编码,Unicode编码提供了更广泛的字符范围,能够支持全球范围内的各种语言和字符集。因此,在国际化应用中使用Unicode编码如UTF-8,能够更好地支持多语言文字的表示和交换。

3 英文字符与中文字符的区别

不同字符编码,英文字符和中文字符占的字节会有差别。下面展开介绍

  1. ASCII编码:一个英文字母(不分大小写)占1字节的空间,不支持中文字符
  2. Unicode编码:Unicode编码是一种字符集,它定义了字符与数字代码点之间的对应关系。具体到编码方案,比如UTF-8、UTF-16和UTF-32,所占字节数是不同的。
    1. UTF-8编码中,一个英文字符等于一1字节,一个中文(含繁体)等于3个字节
    2. UTF-16编码中,一个英文字符或一个汉字字符存储都需要2个字节Unicode扩展区的一些汉字存储需要4个字节)。
    3. UTF-32编码中,世界上任何字符的存储都需要4个字节
  3. GBK编码:GBK是中文编码的一种,它兼容ASCII编码,英文字符占用1个字节,中文字符占用2个字节
  4. Big5编码:Big5是繁体中文编码的一种,英文字符占用1个字节,中文字符占用2个字节
  5. GB2312编码:GB2312是简体中文编码的一种,英文字符占用1个字节,中文字符占用2个字节
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值