字符串编码是Python中常见的问题,尤其是在编写文件和网络传输的过程中。在调用一些函数时,经常会遇到一些字符串编码提示错误,所以有必要搞清楚这些编码到底是怎么回事。

我们都知道计算机只能处理数字,文本只有转换成数字才能处理。在计算机中,8位作为一个字节,所以一个字节可以代表的最大数字是255。计算机是美国人发明的,但英语中涉及的代码并不多。一个字节可以代表所有字符,因此ASCII(美国国家信息交换标准码)成为美国人的标准码。但是我们都知道,中文中的汉字肯定超过255个,用ASCII编码处理中文显然是不够的。所以中国制定了GB2312编码,用两个字节代表一个汉字,特殊情况下甚至用三个字节代表一个汉字。GB2312还包括ASCII。同理,日本、韩国等几百个国家为了解决这个问题,都开发了自己的代码,所以标准越来越多,多种语言混用就会出现乱码。然后,针对这种编码“混乱”,Unicode应运而生,它将所有语言统一成一套编码规则。

Unicode有很多种代码,例如,它可以用16位或32位将所有语言统一成一组代码。比如栗子,字母A用ASCII编码,十进制65,二进制0100 0001;汉字“中”超出ASCII编码范围,unicode编码为20013,二进制为01001110 00101101;unicode编码只需在0之前,二进制数为00000000 0100 0001。可见,unicode不仅解决了ASCII本身的编码问题,还解决了ASCII编码范围以外的其他国家的字符编码统一问题。

虽然unicode编码可以统一不同国家的字符,解决字符乱码的问题,但是如果内容都是英文的话,unicode编码需要的存储量空是ASCII编码的两倍,如果传输的话,需要的传输量是ASCII编码的两倍。当传输的文件比较小时,内存资源和网络带宽还是可以承受的。当文件传输达到TB时,如果是“硬”的,那么需要消耗的资源就不要低估了。为了解决这个问题,一种变长编码“utf-8”应运而生,它使英文长了一个字节,汉字长了三个字节,特别是罕见的4-6个字节。如果大量传输英语,utf8会起到明显的作用。

但是由于utf-8编码长度可变,一个字符串占用一个字节,一个字符串占用两个字节,有的占用三个或更多字节,这就很难在内存或程序中琢磨。Unicode编码占用了空之间的内存,但在编程或内存处理过程中比utf-8编码简单,因为它始终保持相同的长度,使得内存和代码的处理更容易。因此,当使用utf-8编码进行网络传输和文件保存时,可以将unicode编码转换为utf-8编码,以便更好地发挥其作用。将文件中的数据读入内存时,将utf-8编码转换为unicode编码也是一个很好的策略。

如上图,当需要在内存中读取文件时,此时utf-8编码内存转换为unicode编码,在内存中进行统一处理;当需要保存文件时,为了空和传输效率,unicode编码转换为utf-8编码。在Python中读取和保存文件时,必须显示指定的文件代码,其余的留给Python的相关库。

小伙伴们,了解了这些基础知识之后,就更容易理解Python中的字符串编码问题了。

1.《unicode码 浅谈unicode编码和utf-8编码的关系》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《unicode码 浅谈unicode编码和utf-8编码的关系》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1562695.html