Python3学习之路~2.9 字符编码与转码

详细文章:html

http://www.cnblogs.com/yuanchenqi/articles/5956943.htmlpython

http://www.diveintopython3.net/strings.htmlide

需知:网站

1.在python2默认编码是ASCII, python3里默认是unicode编码

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是如今最经常使用的unicode版本, 不过在文件里存的仍是utf-8,由于utf8省空间spa

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string.net

 

上图仅适用于py2code

 

先说python2htm

  1. py2里默认编码是ascii
  2. 文件开头那个编码声明是告诉解释这个代码的程序 以什么编码格式 把这段代码读入到内存,由于到了内存里,这段代码实际上是以bytes二进制格式存的,不过即便是2进制流,也能够按不一样的编码格式转成2进制流,你懂么?
  3. 若是在文件头声明了#_*_coding:utf-8*_,就能够写中文了, 不声明的话,python在处理这段代码时按ascii,显然会出错, 加了这个声明后,里面的代码就全是utf-8格式了
  4. 在有#_*_coding:utf-8*_的状况下,你在声明变量若是写成name=u"大保健",那这个字符就是unicode格式,不加这个u,那你声明的字符串就是utf-8格式
  5. utf-8 to gbk怎么转,utf8先decode成unicode,再encode成gbk

再说python3blog

  1. py3里默认文件编码就是utf-8,因此能够直接写中文,也不须要文件头声明编码了,干的漂亮
  2. 你声明的变量默认是unicode编码,不是utf-8, 由于默认便是unicode了(不像在py2里,你想直接声明成unicode还得在变量前加个u), 此时你想转成gbk的话,直接your_str.encode("gbk")便可以
  3. 但py3里,你在your_str.encode("gbk")时,感受好像还加了一个动做,就是就是encode的数据变成了bytes里,我擦,这是怎么个状况,由于在py3里,str and bytes作了明确的区分,你能够理解为bytes就是2进制流,你会说,我看到的不是010101这样的2进制呀, 那是由于python为了让你能对数据进行操做而在内存级别又帮你作了一层封装,不然让你直接看到一堆2进制,你能看出哪一个字符对应哪段2进制么?什么?本身换算,得了吧,你连超过2位数的数字加减运算都费劲,还仍是省省心吧。  
  4. 那你说,在py2里好像也有bytes呀,是的,不过py2里的bytes只是对str作了个别名(python2里的str就是bytes, py3里的str是unicode),没有像py3同样给你显示的多出来一层封装,但其实其内部仍是封装了的。 这么讲吧, 不管是2仍是三, 从硬盘到内存,数据格式都是 010101二进制到-->b'\xe4\xbd\xa0\xe5\xa5\xbd' bytes类型-->按照指定编码转成你能看懂的文字
#-*-coding:utf-8-*-
import sys print(sys.getdefaultencoding()) #ascii
 msg = "你好" msg_gbk = msg.decode("utf-8").encode("gbk") msg_gbk_to_utf8 = msg_gbk.decode("gbk").encode("utf-8") print(msg) print(msg_gbk) print(msg_gbk_to_utf8)
in python2
import sys print(sys.getdefaultencoding()) #utf-8
msg="你好" msg_gbk = msg.encode("gbk") #默认就是Unicode,不用再decode
msg_gbk_to_unicode = msg_gbk.decode("gbk") msg_gbk_to_utf8 = msg_gbk.decode("gbk").encode("utf-8") print(msg) #你好
print(msg_gbk) #b'\xc4\xe3\xba\xc3'
print(msg_gbk_to_unicode) #你好
print(msg_gbk_to_utf8) #b'\xe4\xbd\xa0\xe5\xa5\xbd'
in python3

编码应用比较多的场景应该是爬虫了,互联网上不少网站用的编码格式很杂,虽然总体趋向都变成utf-8,但如今仍是很杂,因此爬网页时就须要你进行各类编码的转换,不过生活正在变美好,期待一个不须要转码的世界。

相关文章
相关标签/搜索