您好,登錄后才能下訂單哦!
python2不是以unicode作為基本代碼字符類型,碰到亂碼的幾率是遠遠高于python3,但即便如此,相信很多人,也不想隨意的遷移到python3,這里就總結幾個我平常碰到的問題及解法。
1、文件中無法使用中文注釋
處理方法:
在代碼中增加 # -*- coding=UTF-8 -*-
,一般加在文件頭部第一行,如果第一行是腳本標志,則放在第二行(實際仍然是python正本的第一行)。
隨后將文件另存為UTF-8格式。
此方法可以解決注釋中有中文,及字符串立即數中包含中文的問題。
2、unicode中文變量打印出來是亂碼
處理方法:
文件開始引入擴展庫的部分加入以下3行代碼。
import sys reload(sys) sys.setdefaultencoding('utf-8')
3、utf-8 及 gbk互相轉換
直接看代碼:
#utf-8字符串轉換成GBK(GB2312及其它編碼也是這樣用) print str.decode('UTF-8').encode('GBK') #gbk轉換成utf-8 print 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");
嗯,差不多就這些,想到再補充。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。