① python 無法顯示漢字
實際上,這段代碼所出現的問題和cPickle模塊沒什麼關系。而是Python 2顯示中文「亂碼」的問題。
Python 2中,str是8-bit string sequence(有點像Python 3中的bytes)。而Python 3中str就相當於Python 2中的unicode。
所以,
>>>a='上海'
>>>repr(a)
"'\xc9\xcf\xba\xa3'"
>>>a#a中存儲的8位元組轉義字元序列
'xc9xcfxbaxa3'
>>>printa#輸出a,在此過程中,會對a進行解碼操作,然後輸出
上海
上例中,可以看到:
a = '上海'
a中實際存儲的是:
'xc9xcfxbaxa3'
這樣一個位元組序列。它實際上是對'上海'這個unicode字元串按gbk/cp936/gb18030編碼得到的(和簡體中文Windows操作系統的默認編碼有關)。
給你推薦一篇博客:
http://blog.csdn.net/kiki113/article/details/4062063
下面是我寫的示例:
#_*_coding:gbk_*_
#TestwithPython2.7,Python3.3onWindowsXP
try:
importcPickleasp
except:
importpickleasp
address_file='address.txt'
classHuman(object):
def__init__(self,address):
self.address=address
deftxl(self):
af={'address':self.address}
print(af)
print(af['address'])
f=open(address_file,'wb')#Inpython3,usebinarymode.
#Inpython2.7,defaultprotocolis0.
#However,itis3inpython3.3.
p.mp(af,f,0)
f.close()
address='上海'
print(address)
dq=Human(address)
dq.txl()
af=open(address_file,'rb')#
print(p.load(af))
af.close()
"""
Output
----------------------------------------
Python2.7.6:
1.#-*-coding:utf-8-*-
涓婃搗
{'address':'xe4xb8x8axe6xb5xb7'}
涓婃搗
{'address':'xe4xb8x8axe6xb5xb7'}
2.#-*-coding:gbk-*-or#_*_coding:cp936_*_
上海
{'address':'xc9xcfxbaxa3'}
上海
{'address':'xc9xcfxbaxa3'}
Python3.3.3:
上海
{'address':'上海'}
上海
{'address':'上海'}
------------------------------------------
InPython3.3.3:
>>>'上海'.encode('utf-8')
b'xe4xb8x8axe6xb5xb7'
>>>_.decode('cp936')
'涓婃搗'
"""
從這個示例中可以看出,雖然把字典整個print出來不能正常解析address中的內容:
>>>addr={'addr':'上海'}
>>>addr
{'addr':'xc9xcfxbaxa3'}
>>>printaddr
{'addr':'xc9xcfxbaxa3'}
但是單獨列印:
>>>addr['addr']
'xc9xcfxbaxa3'
>>>printaddr['addr']#print輸出之前隱含了編碼解碼操作,但為何列印整個字典時輸出不正常尚待研究
上海
一切OK。
所以,如果真的用Python 2的話,對於該問題可以考慮手工負責編碼、解碼操作(如果使用print單獨列印地址信息,就不用這么麻煩了,因為這些事它幫你做了)。用Python3,就沒這么多問題了。
最後補充一點,pickle模塊只是提供了一種序列化Python對象的方法。所以序列化生成的文件中和想像的不一樣也不足為奇。正如自由de王國所說的,只要序列化後還能夠反序列化成功就行了。實際上,當protocol不是0的情況下,序列化生成的文件是二進制格式的,根本沒法用記事本直接看。
② python與pygame顯示中文的問題,SimHei就可以,"宋體"就不行!
pygame.font.SysFont('SimHei',36)這個api是pygame寫的,你寫中絕模文'宋體'不一定可以找到這個字體,具體要看這液李個api的實現方式。
你可以並埋緩用pygame.font.get_fonts()來查看系統支持那些字體,我這里用這個api查看,宋體對應的名稱應為:simsunnsimsun。因此使用宋體應改為:
font=pygame.font.SysFont('simsunnsimsun',36)
③ python3.3版本,導入帶有中文字元的.py文件 提示 (unicode error) 'utf-8' codec can't decode
該city模塊中包含非utf-8編碼的中文字元,選擇一個合用的python編輯工具: scite, geany, sublime_text, notepad++ .. 等均可, 這些編輯碰圓搏器都支持在保存文件時指定編碼格式。
④ python2.7測試print出漢字,報錯
別使用notepad++這樣的東西裂知陪。如果你想在程序里放入漢字肆蠢,最好使用idle。否則你最好設置編輯器一直使用UTF-8。不管猛襪是notepad++, subslime還是eclipse,這方面都比不上idle好用。
idle會自動按coding:xxxx編碼方式存貯。其它的編輯器不會。
另外不要使用gb2312,許多漢字在這個字元集里沒有。你要用gbk或者是gb18030
在idle里編輯上面的文件。把gb2312改成gb18030,這樣就沒有問題了。
試試看
⑤ 如何解決Python中文問題
python的中文問題一直是困擾新手的頭疼問題,Python的發行版至今尚未包括任何中文支持模塊。當然,幾乎可以確定的是,在將來的版本中,python會徹底解決此問題,不用我們這么麻煩了。 筆者使用的是2.5版本。Python的版本可以通過調用sys模塊的sys.version查看。在幾個月的學習中,主要遇到以下問題:
1. print列印中文的問題:
在編輯器中輸入一段測試代碼:
s=』測試』
print s
運行結果如下:
Non-ASCII character '\xb2' in file c:\Documents and Settings\Administrator\桌面\2.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details: 2.py, line 1, pos 0
原因是如果文件里有非ASCII字元,需要指定編碼聲明。把2.py文件的編碼重新改為utf-8,並加上編碼聲明:
# -*- coding: utf-8 -*-
s=』測試』
print s
運行後可以正確列印中文。
2.中文路徑的問題。
在D盤下保存一個名字為『中文.txt『的文件。運行如下測試代碼:
# -*- coding: utf-8 -*-
f=open('D:\\中文.txt', 'r')
print f.read()
運行結果如下:
IOError: [Errno 2] No such file or directory: 'D:\\\xe4\xb8\xad\xe6\x96\x87.txt'
字元串有很多的編碼,不同的系統和平台有各自的編碼 ,為了實現系統或平台之間的信息交互可能需要編碼轉換。這里只需要先使用UNICODE編碼一下,這樣再讀取中文路徑就不會有問題了:
復制代碼
# -*- coding: utf-8 -*-
path='D:\\中文.txt'
spath=unicode(path , "utf8")
f=open(spath,'r')
print f.read()
復制代碼
然後就可以正確顯示文件內容
總結:
所有的中文顯示問題都可以歸結為編碼問題,遇到其他類似的問題,那隻能仔細看文檔,靠你的經驗,靠你多做測試。而且根據python所報出來的錯誤一般也可以判斷出來。那麼當發現需要編碼轉換時,剩下的就是如何正確進行碼制轉換。
為了正確處理多語言文本,Python在2.0版後引入了Unicode字元串。從那時起,Python語言中的字元串就分為兩種:一種是2.0版之前就已經使用很久的傳統Python字元串,一種則是新的Unicode字元串。在Python語言中,一般的解決辦法是使用unicode()內建函數對一個傳統Python字元串進行「解碼」,得到一個Unicode字元串,然後又通過Unicode字元串的encode()方法對這個Unicode字元串進行「編碼」,將其「編碼」成為傳統Python字元串。
⑥ python 的注釋中不能用漢字的解決辦法
開始學python,編的函數居然不能用漢字注釋頃猜棗兆碼,網上查了一下,在文雀拆件的頭2行加入
# -- coding: utf-8 --
就可以了
如下面的函數,運行就不會報錯了
# 計算面積的函數
def cal_area( width , height ):
return width*height
OK!
⑦ 請問,python打開中文字元文件,但顯示不出中文怎麼辦
一般是編碼格式的問題,python內部默認的編碼格式是utf-8,常見的文本編碼格式是utf-8,gbk。編碼格式不不一致就會亂碼。可以在代碼前面申明編碼格式。
⑧ python 判斷是不是中文字
法一:
isinstance(s, str) 用來判斷是否為一般字元串
isinstance(s, unicode) 用來判斷是否為unicode
或
if type(str).__name__!="unicode":
str=unicode(str,"utf-8")
else:
pass
法二:
Python chardet 字元編碼判斷
使用 chardet 可以很方便的實現字元串/文件的編碼檢測。尤其是中文網頁,有的頁面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些頁面,知道網頁編碼很重要的,雖然HTML頁面有charset標簽,但是有些時候是不對的。那麼chardet就能幫我們大忙了。
chardet實例
>>> import urllib
>>> rawdata = urllib.urlopen('http://www.google.cn/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
>>>chardet可以直接用detect函數來檢測所給字元的編碼。函數返回值為字典,有2個元數,一個是檢測的可信度,另外一個就是檢測到的編碼。
chardet 安裝
下載chardet後,解壓chardet壓縮包,直接將chardet文件夾放在應用程序目錄下,就可以使用import chardet開始使用chardet了。
或者使用setup.py安裝文件,將chardet拷貝到Python系統目錄下,這樣所有的python程序只要用import chardet就可以了。
⑨ 為什麼我在python中輸入的中文總不能顯示呢
python報錯invalid character in identifier,意思就是「標識符中的無效字元」,檢查下有沒有字元是中文的,把中文字元改成英文字元再運行就可以了。
Python的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。
一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括弧{}來明確的定出模塊的邊界的,與字元的位置毫無關系)。這一點曾經引起過爭議。
因為自從C這類的困皮語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程序語言的進步。不過不可否認的是,通過強制程序員們縮進(汪芹差包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。
(9)Python不識別中國字擴展閱讀
Python 中文編碼:
Python中默認的編首和碼格式是 ASCII 格式,在沒修改編碼格式時無法正確列印漢字,所以在讀取中文時會報錯。
解決方法為只要在文件開頭加入# -*- coding: UTF-8 -*-或者# coding=utf-8就行了
注意:# coding=utf-8的=號兩邊不要空格。
實例:
(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print( "你好,世界" )
輸出結果為:
你好,世界