導航:首頁 > 編程語言 > python不顯示中文

python不顯示中文

發布時間:2023-12-03 04:37:25

1. 如何解決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字元串。

2. 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的情況下,序列化生成的文件是二進制格式的,根本沒法用記事本直接看。

3. Python繪圖如何顯示中文標題

採用matplotlib作圖時默認設置下是無法顯示中文的,例如編寫如下python腳本,
#-*- coding: utf-8 -*-
from pylab import *
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'鍾形函數')
plt.xlabel(u'時間')
plt.ylabel(u'幅度')
plt.show()
顯示出來的結果如圖1所示,可見標題、標簽都無法正常顯示中文:
圖1
實際上,matplotlib是支持unicode編碼的,出現圖1的問題主要是沒有找到合適的中文字體,在matplotlib的配置文件中,可以看到字體的默認設置如下:
#font.family : sans-serif
#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
並沒有中文字體,所以我們只要手動添加中文字體的名稱就可以了,不過並不是添加我們熟悉的「宋體」或「黑體」這類的名稱,而是要添加字體管理器識別出的字體名稱,matplotlib自身實現的字體管理器在文件font_manager.py中,自動生成的可用字體信息在保存在文件fontList.cache里,可以搜索這個文件查看對應字體的名稱,例如simhei.ttf對應的名稱為』SimHei』,simkai.ttf對應的名稱為』KaiTi_GB2312』等。因此我們只要把這些名稱添加到配置文件中去就可以讓matplotlib顯示中文,修改的方法有兩種:
1. 直接修改配置文件matplotlibrc
在配置文件中找到font.sans-serif的設置,然後添加需要的中文字體名稱,例如:
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
2. 動態設置(推薦方式)
在python腳本中動態設置matplotlibrc,這樣不需要更改配置文件,方便靈活,例如:
mpl.rcParams['font.sans-serif'] = ['SimHei']
修改後的代碼如下:
#-*- coding: utf-8 -*-
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'鍾形函數')
plt.xlabel(u'時間')
plt.ylabel(u'幅度')
plt.show()
顯示出來的結果如圖2所示,可見標題、標簽都能正常顯示中文:
圖2
但是細心些可以看出圖2顯示的結果並不正確,注意對比圖1和圖2的橫坐標的坐標值,會發現圖2中負軸的橫坐標值不對,負號不見了!很明顯,這不是程序的錯誤,而是由於更改了字體導致顯示不出負號,在配置文件中我們可以在axes相關設置里找到如下設置:
#axes.unicode_minus : True
可見默認情況下採用的是unicode的minus,看來我們選擇的字體對這點支持不夠,所以只要把它設置為False就可以了,最終的代碼如下:
#-*- coding: utf-8 -*-
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'鍾形函數')
plt.xlabel(u'時間')
plt.ylabel(u'幅度')
plt.show()
最終顯示的結果如圖3所示,一切都正常了。

4. 我剛開始學習python,最近運行一個練習程序,運行後的後兩行突然不顯示中文(之前運行這個程序顯示中文)

一般在文件最上面添加下面的語句就可以了
# -*- coding: utf-8 -*-

5. Python繪圖時如何顯示中文

Python使用matplotlib.pyplot畫圖,需要將部分標題等內容顯示為中文,但是直接輸入:
pyplot.xlabel('時間')

這時生成的圖片並不會將「時間」正常顯示出來,而如果我們需要顯示中文,有兩種方法。
方式一:示例
rcParams的屬性
相關推薦:《Python視頻教程》
方式二:(推薦使用)
示例:
中文字體種類

6. 請問,python打開中文字元文件,但顯示不出中文怎麼辦

一般是編碼格式的問題,python內部默認的編碼格式是utf-8,常見的文本編碼格式是utf-8,gbk。編碼格式不不一致就會亂碼。可以在代碼前面申明編碼格式。

閱讀全文

與python不顯示中文相關的資料

熱點內容
娛樂化app怎麼做 瀏覽:634
加密貨幣行業前景如何 瀏覽:570
arm查詢法的局限性和編譯流程 瀏覽:78
醒圖的文件夾叫什麼 瀏覽:998
php程序員北京 瀏覽:175
gcc編譯進程數據 瀏覽:653
手機上的文件夾是怎樣的 瀏覽:166
微雲群共享文件夾改變 瀏覽:534
程序員三年後能做什麼 瀏覽:449
分解運演算法則 瀏覽:876
python腳本執行sudo 瀏覽:721
安徽科海壓縮機 瀏覽:372
怎麼下載app里的講義 瀏覽:158
命令重啟伺服器 瀏覽:210
android電視root許可權獲取 瀏覽:249
解放戰爭pdf王樹增 瀏覽:685
python壓測app介面 瀏覽:953
抖音app怎麼推薦 瀏覽:100
歌庫伺服器能做其他什麼用途 瀏覽:95
安卓44虛擬機怎麼root 瀏覽:38