Python中unicode和utf8是什么

这篇文章主要介绍了Python中unicode和utf8是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了阿拉尔免费建站欢迎大家使用!

 

中文乱码、unicode和utf8

 

编码演化史

 
ASCII编码

在很久很久以前,美国人发明了计算机,计算机只能处理数字也就是把文字转换为8个bit也就是一个字节,8个bit最大能表示的数字为255,而[A-Z]、[a-z]、[0-9]再加上键盘上的一些符号正好255个,所以ASCII编码就成为了美国人的标准编码(用一个字节代表一个字母或者符号),正好也满足了美国人的需求。

 
GB2312

有了上面的情况,我大中国表示不服,我们中国汉字博大精深,255个明显是满足不了我们的需求的,于是我们就发明了GB2312编码(用两个字节表示汉字),不仅包含了ASCII码还能表示我们的中国的汉字,于是有了我们中国的例子,世界各国纷纷研究出了支持自己语言的编码,在这种情况下多种语言混合显示就出现了乱码的情况了,对于这种情况就出现了unicode编码将所有语言统一到一起。

 
unicode

unicode编码的出现解决了多国语言展示乱码的问题,但是unicode的解决方案在全英文文档展示的情况下,unicode编码会比ASCII编码多一倍的存储空间(unicode的编码是16bit的,在表示ASCII编码时是直接在前面加上8个0)相应的在传输的时候就多了一倍的传输时间,在这种情况下就出现了UTF8编码。

 
UTF8

UTF8编码相比于8bit的ASCII编码和16bit的unicode编码来说,UTF8编码是不定长的,它可以使用两个字节代表英文,用三个字节代表中文,UTF8这个时候优势就很大了,在实际运用中,我们可以将文件编码互相转换以获取最大化的利用内存,把文件保存在内存中我们采用内存占用更小的UTF8编码的格式,读写文件时我们采用更大更全的unicode编码,具体实例图如下:

Python中unicode和utf8是什么  
示例图
 

代码演示

 
Python2.7
 
windows
Python中unicode和utf8是什么  

在python2.7中当要将字符串encode为utf8,我们需要确保之前的字符串的编码方式为unicode,所以当字符串编码不为unicode时,我们需要使用decode方法,而在使用decode方法时我们需要指明原有字符串的编码格式(在windows系统中解释器默认编码为GB2312,Linux系统中为UTF-8编码),所以就有了  s.decode("gb2312").encode("utf-8")。  
 
Python中unicode和utf8是什么  
decode示意图
 
Linux

按照上面解读,我们在Linux系统下操作如下:

Python中unicode和utf8是什么  

这里就有一个疑问既然原有系统默认的字符串编码为utf-8,为什么不可以直接使用s.decode().encode('utf-8')?原因就是,如若不指定原有的系统编码格式(utf-8),Linux系统下会调用python解释器的默认编码ASCII解析字符串,演示如下:  
 
Python中unicode和utf8是什么  

所以在根据上面的情况,在python2中出现编码互转的情况,可以参考下图:  
 
Python中unicode和utf8是什么  
 
Python3.6

Python2.7和Python3.6最大的区别就是在执行Python2.7项目时,当项目中包含汉字时,需要在文件头声明编码格式,否则项目中的中文显示就是乱码。
而在Python3中完全没有这样的顾虑,那是因为默认python3中全部的字符串就是unicode可以直接使用encode方法。

Python中unicode和utf8是什么  


感谢你能够认真阅读完这篇文章,希望小编分享的“Python中unicode和utf8是什么”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网页名称:Python中unicode和utf8是什么
转载注明:http://pwwzsj.com/article/pjhcpp.html