中文编码问题一直是令程序员头疼的问题,而Python2中的字符编码就足以让新手抓狂。本文将尝试用通俗易懂的语言,让你彻底了解字符编码
以及Python2和3中的各种编码问题。
一、什么是字符编码。
要想彻底解决字符编码的问题,我们就得了解什么是字符编码。计算机基本上只能识别二进制的 0 和 1。可以说计算机中的任何数据
磁盘中的实际物理表示是0和1,拆开硬盘是看不到所谓的0和1的,看到的是光滑闪亮的磁盘。如果你
用足够大的放大镜,可以看到盘面有无数凹凸不平的元素。凹的代表0,凸的代表1,计算机就是这样表示二进制的。
式。
1.ASCII
现在我们面临第一个问题:如何让计算机理解人类的语言,比如英语?让我们以英语为例。在英文中,有英文字母(大小写)、标点符号、特殊
特殊符号。如果我们给这些字母和符号赋予固定的数字,然后将这些数字转换成二进制,那么计算机显然可以正确读取这些符号,同时通过
通过这些数字,计算机还可以将二进制转换成数字对应的字符,然后显示出来供人阅读。由此产生了我们最熟悉的ASCII码。 ASCII码使用指定的
7 位或 8 位二进制数来表示 128 或 256 个可能的字符。这样一来,在大多数情况下,英文和二进制的转换就变得容易多了。
2.GB2312
但是,虽然计算机是美国人发明的,但是全世界的人都在使用计算机。现在又出现了一个问题:如何让计算机看懂中文?这个麻烦,
与拉丁文不同,中文是由固定的字母组成的。 ASCII码显然没有办法解决这个问题。为解决这一问题,国家标准总局印发《通知》
《信息交换用汉字编码字符集》提出GB2312编码,解决汉字处理问题。 1995年,《汉字编码扩展规范》(GBK)颁布。 GBK 和
兼容国标GB 2312-1980对应的内码标准,在词汇层面支持ISO/IEC10646-1和GB 13000-1的所有中日韩(CJK)汉字
词,共20902词。这样,我们就解决了计算机处理汉字的问题。
3.Unicode
现在英文和中文的问题都解决了,但是新的问题又出现了。世界上有这么多国家,不仅有英语、汉语,还有阿拉伯语、西班牙语、日语、韩语等。
等待。是否可以为每种语言进行编码?基于这种情况,一种新的编码诞生了:Unicode。 Unicode 也称为Unicode 和Universal Code;它用于每种语言
为每个字符设置统一唯一的二进制编码,以满足跨语言、跨平台的文本转换和处理的要求。 Unicode 支持欧洲、非洲、中东、亚洲
大洲(包括统一标准的东亚象形文字和韩国表音文字)。这样,无论你使用的是英文还是中文,日文还是韩文,都会被包含在Unicode编码中。
并对应一个唯一的二进制代码。如此一来,皆大欢喜。只要大家都用Unicode编码,就不会有这种转码问题,任何字符都可以解析
了。
4.UTF-8
但是,由于Unicode包含的字符较多,可以想象其解析效率相比ASCII码和GB2312的速度是大大降低的,而且由于Unicode增加了一个
第一个高字节扩展了 ISO Latin-1 字符集。当这些高字节位为 0 时,低字节为 ISO Latin-1 字符。对可以用 ASCII 表示的字符使用 Unicode
效率不高,因为Unicode占用的空间是ASCII的两倍,高字节0对ASCII没用。为了解决这个问题,出现了一些中间网格。
字符集,它们被称为Universal Transformation Format,即UTF(Unicode Transformation Format)。而我们最常用的UTF-8就是其中一种转换格式
种类。这里不研究UTF-8是如何提高效率的,你只需要了解它们之间的关系即可。
总结:
1.为了处理英文字符,产生了ASCII码。
2.为了处理中文字符,产生了GB2312。
3.为了处理各国字符,产生了Unicode。
4.为了提高Unicode存储和传输性能,产生了UTF-8,它是Unicode的一种实现形式。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python的eval函数的作用08/16
- ♥ Python中的复数函数是什么?08/14
- ♥ python支持字符串吗12/06
- ♥ 如何用Python实现邮件功能12/29
- ♥ 码如其人,同学你能写一手漂亮的Python函数吗01/22
- ♥ 如何保存python文件09/24
内容反馈