字符編碼
一開始制定字符編碼只考慮了英文 ASCII編碼表(包含英文、數(shù)字和常用字符)摸柄, 0~127
為了統(tǒng)一颤练,誕生了Unicode編碼,包含了世界上所有國家的字符驱负,對編碼進行了大一統(tǒng)嗦玖。每個字符占用3~6個字節(jié),浪費空間
最終誕生了 utf-8可變長的 Unicode跃脊,一個漢字占3個字節(jié)宇挫,一個字母占1個字節(jié),大大了減少了空間占用酪术。
Python2和Python3的 字符編碼 和 字符類型
Python3:
Unicode字符串 str 類型
非Unicode字符串 bytes 類型
Python2:
Unicode字符串 unicode 類型
非Unicode類型 str 類型
處理字符串寫入文件時候的編碼
# Python不能直接寫 Unicode字符串到文件中, 必須寫非Unicode
"""1. 手動轉(zhuǎn)碼處理"""
Python3:
# w寫Unicode, wb寫非Unicode(gbk,utf-8,jpg,mp4)
with open("xxx.txt", "wb") as f:
f.write(unicode_str.encode("utf-8"))
Python2:
# wb寫Unicode, w寫非Uncode(str)
with open("xxx.txt", "w") as f:
f.write(unicode_str.encode("utf-8"))
"""2. 通過open()方法的encoding參數(shù)"""
Python3:
with open("xxx.txt", "w", encoding="utf-8") as f:
f.write(unicode_str)
Python2:
Python2的 open() 沒有 encoding器瘪,但是可以通過 codecs 模塊解決
import codecs
with codecs.open("xxx.txt", "w", encoding="utf-8") as f:
f.write(unicode_str)
"""3. 如果強行寫入Unicode字符串,且并沒有通過1和2處理绘雁,則Python解釋器編碼嘗試轉(zhuǎn)碼再寫入"""
with open("xxx.txt", "w") as f:
f.write(unicode_str)
# Python2默認(rèn)解釋器編碼是ascii橡疼,在處理中文則報錯 UnicodeEncodeError無法按ASCII編碼處理中文字符串,
# 解決方案庐舟,將Python2 解釋器編碼修改為utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# Python3 默認(rèn)解釋器編碼是utf-8欣除,不會出現(xiàn)任何錯誤
代碼文件頭部編碼聲明
Python2 默認(rèn)代碼文件編碼聲明是ascii,所以代碼中有中文部分會報錯挪略,解決方案历帚,在代碼第一行添加
#coding:utf-8