一、python有兩種字符串類型:str和unicode
1、str:常用的字符集如:gb2312、gb18030/gbk、utf-8、ascii,這些都是字符的二進制(字節)編碼形式
2、unicode:Python 認為 16 位的 unicode 才是字符的唯一內碼
3、encode:從unicode轉換成二進制編碼,即從unicode轉換成str
4、decode:從二進制編碼轉換成unicode
5、在進行同時包含str與unicode的運算時,Python一律都把str轉換成unicode再運算,當然,運算結果也都是unicode。
6、建議在
python代碼
# -*- coding: utf-8 -*-
#第一行表明python代碼由utf-8編碼
#-----------------------------------------1----------------------------------------
s='我是誰' #這是個str的字符串,是utf-8字符串
u=u'我是誰' #這是個unicode字符串
s.decode('utf-8') #從str轉成unicode,即用utf-8解碼字符串s
u.encode('utf-8') #從unicode轉成str,即將unicode碼按utf-8編碼成字符串
s.decode('ascii') #錯誤,用ascii解碼utf-8字符串
s.decode('gbk') #不出錯,但出現亂碼
u.encode('ascii') #錯誤,中文無法用ascii字符集編碼
u.encode('gbk') #不出錯,但會出現亂碼
#-----------------------------------------2------------------------------------------
#注意一:在進行同時包含str與unicode的運算時,Python一律都把str轉換成unicode再運算,當然,運算結果也都是unicode。
"中文:%s" % s # 正確,所有的字符串都是 str, 不需要 decode
"中文:%s" % u # 失敗,相當于運行:"中文:%s".decode('ascii') % u ,為什么是ascii,因為sys.getdefaultencoding()默認是ascii
import sys
reload(sys) # reload 才能調用 setdefaultencoding 方法
sys.setdefaultencoding('utf-8') # 設置 'utf-8',這個是全局的,對當前程序運行的所有python代碼都起作用
#若 linux的$LANG為zh_CN.GBK,則print s輸出到終端時會出現亂碼,但print u輸出到終端不會亂碼,會將u按$LANG的字符集編碼
?
參考:https://in355hz.iteye.com/blog/1860787
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
