python的字符轉(zhuǎn)換常見bug-創(chuàng)新互聯(lián)

1.python把一個(gè)unicode字符串寫入文件為什么會(huì)報(bào)錯(cuò)?

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的桂東網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

write方法的參數(shù)類型是str,str是二進(jìn)制流(不包含編碼信息),當(dāng)你給出一個(gè)unicode對(duì)象時(shí),會(huì)執(zhí)行str函數(shù)轉(zhuǎn)換成str類型再送給write方法。unicode轉(zhuǎn)str包含一次編碼,如不指定則默認(rèn)使用ascii編碼,而ascii編碼集里漢字字符是沒有對(duì)應(yīng)的,所以報(bào)錯(cuò)。

正確做法是在代碼里指定編碼。比如在open里指定(fp= open('test.txt', 'w', encoding='utf-8')),或者在write的時(shí)候手動(dòng)把unicode對(duì)象通過encode方法指定編碼產(chǎn)生str。就是說寫成fp.write(s.encode('utf8'))。注意unicode對(duì)象用encode是有意義的,str對(duì)象在py2里允許你對(duì)str對(duì)象使用encode,然而這是對(duì)指定了default encoding的情況下才有效的,因此不推薦新手對(duì)str直接encode。

2.Error:UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte sequence

原來出現(xiàn)’gbk’ codec can’t encode”的錯(cuò)誤的根本原因是,對(duì)于前面的,不論是用

titleHtml.decode(“UTF-8”);

還是titleHtml.decode(“UTF-8”, ‘ignore’);

還是titleHtml.decode(“UTF-8”, ‘replace’);

都是可以得到正常的titleUni的Unicode字符的,然后對(duì)于此Unicode的字符,需要print出來的話,由于本地系統(tǒng)是Win7中的cmd,默認(rèn)codepage是CP936,即GBK的編碼,所以需要先將上述的Unicode的titleUni先編碼為GBK,然后再在cmd中顯示出來,然后由于titleUni中包含一些GBK中無法顯示的字符,導(dǎo)致此時(shí)提示“’gbk’ codec can’t encode”的錯(cuò)誤的。

對(duì)于此(類)問題:

(1)出現(xiàn)UnicodeEncodeError –> 說明是Unicode編碼時(shí)候的問題;

(2) ‘gbk’ codec can’t encode character –> 說明是將Unicode字符編碼為GBK時(shí)候出現(xiàn)的問題;

此時(shí),往往大的可能就是,本身Unicode類型的字符中,包含了一些無法轉(zhuǎn)換為GBK編碼的一些字符。

解決辦法是:

方案1:

在對(duì)unicode字符編碼時(shí),添加ignore參數(shù),忽略無法無法編碼的字符,這樣就可以正常編碼為GBK了。

對(duì)應(yīng)代碼為:

gbkTypeStr = unicodeTypeStr.encode(“GBK“, ‘ignore’);

方案2:

或者,將其轉(zhuǎn)換為GBK編碼的超集GB18030 (即,GBK是GB18030的子集):

gb18030TypeStr = unicodeTypeStr.encode(“GB18030“);

對(duì)應(yīng)的得到的字符是GB18030的編碼。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享文章:python的字符轉(zhuǎn)換常見bug-創(chuàng)新互聯(lián)
鏈接URL:http://bm7419.com/article2/ddjpoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站制作、商城網(wǎng)站、服務(wù)器托管、建站公司、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)