Python2中文處理紀要的實現方法,python2紀要
python2不是以unicode作為基本代碼字元類型,碰到亂碼的幾率是遠遠高於python3,但即便如此,相信很多人,也不想隨意的遷移到python3,這裡就總結幾個我平常碰到的問題及解法。
1、檔案中無法使用中文注釋
處理方法:
在代碼中增加 # -*- coding=UTF-8 -*-
,一般加在檔案頭部第一行,如果第一行是指令碼標誌,則放在第二行(實際仍然是python正本的第一行)。
隨後將檔案另存新檔UTF-8格式。
此方法可以解決注釋中有中文,及字串立即數中包含中文的問題。
2、unicode中文變數列印出來是亂碼
處理方法:
檔案開始引入擴充庫的部分加入以下3行代碼。
import sysreload(sys)sys.setdefaultencoding('utf-8')
3、utf-8 及 gbk互相轉換
直接看代碼:
#utf-8字串轉換成GBK(GB2312及其它編碼也是這樣用)print str.decode('UTF-8').encode('GBK')#gbk轉換成utf-8print str.decode('GBK').encode('UTF-8')
4、參數中的utf-8是用大寫還是小寫?
通常大小寫都可以,這不是python決定的,是系統的語言代碼設定決定的。
5、開啟utf-8的文字檔
經過1、2的設定,正常直接開啟就可以,檔案是什麼編碼,讀出來就是什麼編碼,個別仍有不行的可以使用擴充庫codecs:
import codecs...with codecs.open(poetry_file, "r","utf-8") as f:
6、print列印出來的結構中的漢字是亂碼
print僅列印一個utf-8的變數是不會有問題的,比如
a="漢字"print a#會正常顯示
但是如果用了接續顯示,比如:
print a,#將會顯示亂碼
如果是其它結構,諸如dict / list / class等,都會出現亂碼。
a = ["中文","測試"]print a#將會顯示亂碼
這種情況使用基本庫沒有什麼好辦法,只能迴圈逐個列印內容,比如:
...for item in items:print item
或者整合輸出,比如: print ', '.join(a)
還可以使用第三方的包,比如:
import uniout...listnine = ['梨', '橘子', '蘋果', '香蕉']print 'listnine list: %s' % listnine
7、變數本身顯示正常,迴圈遍曆出來的單個字元亂碼
大多情況是因為字串不是unicode編碼。聲明字串的時候使用 a = u'漢字'
這樣方式賦值的變數都是Unicode字串,不會有問題。
如果是從外部傳入的變數,源頭情況又不知道,可以嘗試轉換成Unicode字串:
str=unicode(str,"utf-8");
嗯,差不多就這些,想到再補充。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。