目录
- 0 引言
- 1 位、字节、字
- 2 字符编码
- 2.1 为什么要有字符编码
- 2.2 字符编码的种类有哪些
- 拓展:ANSI 编码
- 3 英文字符与中文字符的区别
- 🙋♂️ 作者:海码007
- 📜 专栏:C++专栏
- 💥 标题:位(bit)、字节(byte)、字、英文字符、中文字符的关系详解(涵盖字符编码)
- ❣️ 寄语:书到用时方恨少,事非经过不知难。
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正
0 引言
🎈在学习过程中位(bit)、字节(byte)、字、英文字符、中文字符这些概念在我脑海中一直很模糊,今天就在此回顾一下🎈
1 位、字节、字
-
位 bit
位(bit)是计算机中最基本的信息单位,它可以表示二进制的0或1。一个位只能表示两种状态之一,通常用0表示假(False),用1表示真(True)。 -
字节 byte
字节(byte)是计算机中常用的存储单位,它由8个连续的位组成。字节是计算机中最小的可寻址的存储单元,通常用于表示一个字符或其他小的数据单元。由于一个字节可以表示256(2^8)种不同的状态组合,因此可以表示的字符和数据范围广泛。 -
字
字(word)是一种存储单位,它由若干个字节组成,通常在计算机体系结构中定义了字的大小。字的大小可以是8位、16位、32位或更大,具体取决于计算机的设计。
字在计算机中的作用是存储和处理数据。它可以表示整数、浮点数、字符或其他数据类型,具体取决于字的大小和计算机的架构。字的大小决定了计算机处理数据的能力和精度。较大的字可以存储更大范围的数值或更精确的浮点数,而较小的字则有限制。
字的大小对计算机的性能和功能有重要影响。较大的字可以提高计算机的处理速度和效率,同时也提供了更丰富的数据表示能力。例如,现代计算机通常使用32位或64位的字来处理复杂的计算任务和存储大量的数据。
总结:位是最基本的存储单位,字节是由8个位组成的常用存储单位,字是由若干个字节组成的存储单位,其大小取决于计算机的设计。位用于表示最小粒度的数据,字节用于表示小的数据单元或字符(是计算机中最小的可寻址的存储单元),字用于表示和处理更大范围的数据。
2 字符编码
把下面几个问题回答出来,也就知道字符编码的相关概念了。
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 字符编码的种类有哪些
字符编码是将字符映射到数字代码的方法。以下是一些常见的字符编码标准:
- ASCII(American Standard Code for Information Interchange):ASCII是最早和最常用的字符编码标准,它定义了128个字符的编码,包括英文字母、数字和一些常见符号。
- Unicode:Unicode是一个更为全面的字符编码标准,目标是包含世界上所有字符的编码。它为每个字符分配了一个唯一的代码点,可以用不同的编码方式表示,如UTF-8、UTF-16和UTF-32。
- UTF-8:UTF-8是一种变长的Unicode编码方式,它使用1到4个字节表示不同的字符,能够表示Unicode字符集中的所有字符。
- UTF-16:UTF-16也是一种Unicode编码方式,使用2个或4个字节表示字符,可以表示大部分的Unicode字符。
- UTF-32:UTF-32是一种固定长度的Unicode编码方式,使用4个字节表示每个字符,能够表示Unicode字符集中的所有字符。
除了这些常见的字符编码标准外,还有其他一些编码方式,如ISO-8859系列、GB2312、GBK、Big5等,它们主要用于特定的语言或地区字符集。
- GB2312:GB2312是中国国家标准局发布的汉字字符集标准,用于表示简体中文字符。它包含了6763个常用汉字和682个非汉字符号。
- GBK:GBK是GB2312的扩展版本,也是中国国家标准局发布的字符集标准。GBK包含了GB2312中的字符,同时还增加了包括繁体中文、日文假名、韩文在内的其他字符。GBK能够表示大部分中文字符。
- 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 英文字符与中文字符的区别
不同字符编码,英文字符和中文字符占的字节会有差别。下面展开介绍
- ASCII编码:一个英文字母(不分大小写)占1字节的空间,不支持中文字符。
- Unicode编码:Unicode编码是一种字符集,它定义了字符与数字代码点之间的对应关系。具体到编码方案,比如UTF-8、UTF-16和UTF-32,所占字节数是不同的。
- UTF-8编码中,一个英文字符等于一1字节,一个中文(含繁体)等于3个字节。
- UTF-16编码中,一个英文字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
- UTF-32编码中,世界上任何字符的存储都需要4个字节。
- GBK编码:GBK是中文编码的一种,它兼容ASCII编码,英文字符占用1个字节,中文字符占用2个字节。
- Big5编码:Big5是繁体中文编码的一种,英文字符占用1个字节,中文字符占用2个字节。
- GB2312编码:GB2312是简体中文编码的一种,英文字符占用1个字节,中文字符占用2个字节。