Python2.x中文亂碼問題解決方法
Python中亂碼問題是一個(gè)很頭痛的問題。
在Python3中,對(duì)中文進(jìn)行了全面的支持,但在Python2.x中需要進(jìn)行相關(guān)的設(shè)置才能使用中文。否則會(huì)出現(xiàn)亂碼

【問題原因】
在Python2.x中主要是字符編碼的問題,處理不好的話,會(huì)導(dǎo)致亂碼。Python默認(rèn)采取的ASCII編碼,字母、標(biāo)點(diǎn)和其他字符只使用一個(gè)字節(jié)來表示,但對(duì)于中文字符來說,一個(gè)字節(jié)滿足不了需求。
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
為了能在計(jì)算機(jī)中表示所有的中文字符,中文編碼采用兩個(gè)字節(jié)表示。如果中文編碼和ASCII混合使用的話,就會(huì)導(dǎo)致解碼錯(cuò)誤,從而才生亂碼。而CMD下默認(rèn)的編碼方式為:GBK,所以就造成了上面的亂碼!

采用兩個(gè)字節(jié)的中文編碼標(biāo)準(zhǔn)有:GB2312、GBK、BIG5等。
【處理辦法】
為了將各種不同的語言包含在統(tǒng)一的字符集中,滿足國(guó)際間的信息交流,國(guó)際上制訂了UNICODE字符集,包含了世界上所有語言字符,這些字符具有唯一的編碼,通過使用UNICODE字符集可以滿足跨語言的文字處理,避免亂碼的產(chǎn)生。
i) 交互式命令中:一般不會(huì)出現(xiàn)亂碼,無需做處理

ii) py腳本文件中:跨字符集必須做設(shè)置,否則亂碼。
首先在開頭一句添加:
# coding = utf-8
# 或
# coding = UTF-8
# 或
# -*- coding: utf-8 -*-
其次需將文件保存為UTF-8的格式!
上面那一句僅僅是告訴Python編譯器:腳本中包含了非ASCII字符,并未進(jìn)行轉(zhuǎn)換。
如果要將字符編碼從默認(rèn)的ASCII改為UTF-8,需要在保存的時(shí)候選擇保存為UTF-8格式。
如果是用NODEPAD打開,【另存為】-->UTF-8即可

如果是用IDLE打開,【Options】-> 【Configure IDLE】->【General】

上面的設(shè)置,可以保證IDLE,運(yùn)行F5,能正常輸出中文。
【編碼解碼】
在開頭添加了# -*- coding: utf-8 -*-并將文件保存為UTF-8格式,仍然不能保證能輸出正常輸出中文,
不同的編輯器,如VIM,IDLE,Eclipse使用的輸出編碼都是不一致的。
所以,在一個(gè)地方能正常輸出中文,在另外一個(gè)地方就未必。所以還必須做編碼解碼設(shè)置!
encode:編碼
decode:解碼
必須保證編碼、解碼的對(duì)象是同一個(gè)。比如說UTF-8方式編碼, 必須再用UTF-8進(jìn)行解碼即可。
所以最終解決辦法,還必須先按原先的方式解碼,再按控制臺(tái)格式重新編碼:比如CMD默認(rèn)是GBK方式
則必須使用如下方式:

正確輸出結(jié)果:

【其他說明】
1.在Python3中,對(duì)中文的支持非常全面,源文件默認(rèn)保存為UTF-8的編碼,這樣一來,不但可以在源代碼中使用中文,而且變量名也可以使用中文,比如說:
>>> 中國(guó) = 'Chinese'
>>> print(中國(guó))
Chinese
2.在Python3中,不需要來回的編解碼,并且字符串對(duì)象也沒有decode和encode方法。
相關(guān)文章
跟老齊學(xué)Python之大話題小函數(shù)(2)
上篇文章我們講訴了map 和lambda函數(shù)的使用,本文我們繼續(xù)來看看reduce和filter函數(shù),有需要的朋友可以參考下2014-10-10
使用Python讀寫文本文件及編寫簡(jiǎn)單的文本編輯器
這篇文章主要介紹了使用Python讀寫文本文件及編寫簡(jiǎn)單的文本編輯器的方法,可以利用簡(jiǎn)單的Python代碼實(shí)現(xiàn)編輯器中的讀取清空和文本文件的新建等操作,需要的朋友可以參考下2016-03-03
pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例
今天小編就為大家分享一篇pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
django+celery+RabbitMQ自定義多個(gè)消息隊(duì)列的實(shí)現(xiàn)
本文主要介紹了django+celery+RabbitMQ自定義多個(gè)消息隊(duì)列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
pandas讀取HTML和JSON數(shù)據(jù)的實(shí)現(xiàn)示例
Pandas可以直接讀取html和JSON數(shù)據(jù),本文就來介紹一下pandas讀取HTML和JSON數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下2024-01-01
python中sort()和sorted()的區(qū)別及用法實(shí)例
我們通常會(huì)遇到對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行排序的問題,下面這篇文章主要給大家介紹了關(guān)于python中sort()和sorted()的區(qū)別及用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06

