python中windows下中文亂碼的解決方法

python中windows下中文亂碼的解決方法?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

雞東網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

中文編碼問題是用中文的程序員經(jīng)常頭大的問題,在python下也是如此。

我們要知道python內(nèi)部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程序經(jīng)常要面對的gbk,gb2312,utf8等,那這些編碼是怎么轉(zhuǎn)換成內(nèi)部的unicode呢?

一、源代碼文件的編碼格式

python默認(rèn)會認(rèn)為源代碼文件是asci編碼。

s1='hello'
print s1

python認(rèn)為這個'hello'就是一個asci編碼的字符。在僅僅使用英文字符的情況下一切正常,但是如果用了中文,比如:

s1='你好'
print s1

這個代碼文件被執(zhí)行時就會出錯。python默認(rèn)將代碼文件內(nèi)容當(dāng)作asci編碼處理,但asci編碼中不存在中文,因此拋出異常。

解決方法就是讓python知道文件中使用的是什么編碼。只需在代碼文件的最前端添加如下:

# -*- coding: utf-8 -*-

表示我這個文件里的文本是用utf-8編碼的,這樣,python就會依照utf-8的編碼形式解讀其中的字符,然后轉(zhuǎn)換成unicode編碼內(nèi)部處理使用。

二、windows下控制臺編碼

Python 的 print 語句。它的功能是向控制臺輸出字符,這本身不是問題。但是 Python 內(nèi)部是支持 Unicode 字符串的,而 Unicode 字符串在用 print 輸出時 print 要進(jìn)行一次從 Unicode 到 ANSI/MBCS 編碼的編碼,編碼后才會以 8-bit 流輸出結(jié)果。

編碼就編碼吧,這也是很正常的。對于控制臺程序來說,輸出可能被重定向到文本文件。如果不指定編碼,重定向時就不知道以何種 8-bit 字節(jié)流寫入文本文件,所以,輸出到控制臺的東西理論上也應(yīng)該是經(jīng)過編碼的 8-bit 流。綜上所述,確實有必要進(jìn)行一次 WCHAR 到 char 的轉(zhuǎn)碼。

但是問題在于,Python 的 print 語句在轉(zhuǎn)碼時,居然用的是 strict 規(guī)則。即,待輸出字符串若含有當(dāng)前代碼頁之外的字符,就會在轉(zhuǎn)碼過程中出現(xiàn)不可轉(zhuǎn)碼的文字,從而拋出 exception。print 語句又不處理這個 exception,導(dǎo)致一個平平常常 print 語句竟然會引起 Python 程序的異常!

解決方法:CHCP

CHCP是MS DOS中的命令,用來顯示或設(shè)置活動代碼頁編號的。

用法是:CHCP [nnn]

其中nnn指定的是代碼頁的編號。這個參數(shù)是可選的,在命令行下如果不指定這個代碼頁編號,那么默認(rèn)是顯示當(dāng)前的代碼頁編號。比如,在默認(rèn)的cmd窗口中,我們輸入chcp,顯示的將類似:

活動的代碼頁: 936

這里的936表示當(dāng)前使用的是簡體中文(GB2312)編碼。如果輸出的字符在代碼頁之內(nèi),就不會出現(xiàn)問題。如果出現(xiàn)了,可以:

運行CMD;

輸入 CHCP,回車查看當(dāng)前的編碼;

輸入CHCP 65001,回車;(指定為utf-8)

這時候,你的Console里面,應(yīng)該支持UTF8了。

三、文件讀取

其中,關(guān)于open的編碼解釋如下:

讀取時:內(nèi)置的open()方法打開文件時,read()讀取的是str,讀取后需要使用正確的編碼格式進(jìn)行decode()。write()寫入時,如果參數(shù)是unicode,則需要使用你希望寫入的編碼進(jìn)行encode(),如果是其他編碼格式的str,則需要先用該str的編碼進(jìn)行decode(),轉(zhuǎn)成unicode后再使用寫入的編碼進(jìn)行encode()。如果直接將unicode作為參數(shù)傳入write()方法,Python將先使用源代碼文件聲明的字符編碼進(jìn)行編碼然后寫入。

編碼時:模塊codecs提供了一個open()方法,可以指定一個編碼打開文件,使用這個方法打開的文件讀取返回的將是unicode。寫入時,如果參數(shù)是unicode,則使用open()時指定的編碼進(jìn)行編碼后寫入;如果是str,則先根據(jù)源代碼文件聲明的字符編碼,解碼成unicode后再進(jìn)行前述操作。相對內(nèi)置的open()來說,這個方法比較不容易在編碼上出現(xiàn)問題。

所以可以在讀取的時候指定編碼,這樣可以避免很多問題。

感謝各位的閱讀!看完上述內(nèi)容,你們對python中windows下中文亂碼的解決方法大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁名稱:python中windows下中文亂碼的解決方法
網(wǎng)站地址:http://muchs.cn/article16/jpgigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、外貿(mào)建站網(wǎng)站建設(shè)、服務(wù)器托管做網(wǎng)站、App開發(fā)

廣告

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

網(wǎng)站托管運營