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

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