程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Python2.x中文亂碼問題解決方法

Python2.x中文亂碼問題解決方法

編輯:更多關於編程

       這篇文章主要介紹了Python2.x中文亂碼問題解決方法,本文解釋問題原因、給出了處理辦法並講解了編碼解碼的一些知識,需要的朋友可以參考下

      Python中亂碼問題是一個很頭痛的問題。

      在Python3中,對中文進行了全面的支持,但在Python2.x中需要進行相關的設置才能使用中文。否則會出現亂碼

      【問題原因】

      在Python2.x中主要是字符編碼的問題,處理不好的話,會導致亂碼。Python默認采取的ASCII編碼,字母、標點和其他字符只使用一個字節來表示,但對於中文字符來說,一個字節滿足不了需求。

      代碼如下:

      >>> import sys

      >>> sys.getdefaultencoding()

      'ascii'

      為了能在計算機中表示所有的中文字符,中文編碼采用兩個字節表示。如果中文編碼和ASCII混合使用的話,就會導致解碼錯誤,從而才生亂碼。而CMD下默認的編碼方式為:GBK,所以就造成了上面的亂碼!

      采用兩個字節的中文編碼標准有:GB2312、GBK、BIG5等。

      【處理辦法】

      為了將各種不同的語言包含在統一的字符集中,滿足國際間的信息交流,國際上制訂了UNICODE字符集,包含了世界上所有語言字符,這些字符具有唯一的編碼,通過使用UNICODE字符集可以滿足跨語言的文字處理,避免亂碼的產生。

      i) 交互式命令中:一般不會出現亂碼,無需做處理

      ii) py腳本文件中:跨字符集必須做設置,否則亂碼。

      首先在開頭一句添加:

      代碼如下:

      # coding = utf-8

      # 或

      # coding = UTF-8

      # 或

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

      其次需將文件保存為UTF-8的格式!

      上面那一句僅僅是告訴Python編譯器:腳本中包含了非ASCII字符,並未進行轉換。

      如果要將字符編碼從默認的ASCII改為UTF-8,需要在保存的時候選擇保存為UTF-8格式。

      如果是用NODEPAD打開,【另存為】-->UTF-8即可

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

      上面的設置,可以保證IDLE,運行F5,能正常輸出中文。

      【編碼解碼】

      在開頭添加了# -*- coding: utf-8 -*-並將文件保存為UTF-8格式,仍然不能保證能輸出正常輸出中文,

      不同的編輯器,如VIM,IDLE,Eclipse使用的輸出編碼都是不一致的。

      所以,在一個地方能正常輸出中文,在另外一個地方就未必。所以還必須做編碼解碼設置!

      encode:編碼

      decode:解碼

      必須保證編碼、解碼的對象是同一個。比如說UTF-8方式編碼, 必須再用UTF-8進行解碼即可。

      所以最終解決辦法,還必須先按原先的方式解碼,再按控制台格式重新編碼:比如CMD默認是GBK方式

      則必須使用如下方式:

      正確輸出結果:

      【其他說明】

      1.在Python3中,對中文的支持非常全面,源文件默認保存為UTF-8的編碼,這樣一來,不但可以在源代碼中使用中文,而且變量名也可以使用中文,比如說:

      代碼如下:

      >>> 中國 = 'Chinese'

      >>> print(中國)

      Chinese

      2.在Python3中,不需要來回的編解碼,並且字符串對象也沒有decode和encode方法。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved