Python 2.X 在輸入漢字和特殊字符的時候,經常遇到編碼解碼的問題,究其原因,編譯器默認將文件當做ascii編碼,因此要正確的實現編解碼的轉換,需要進行一些設置。
首先讓我們來了解幾個概念。
env |grep -i lang
import sys
sys.getdefaultencoding()
在python文件開頭加上# –– coding: utf-8 –– 來識別中文並能夠把中文正確的轉換為unicode。
修改python的默認系統編碼
>>> import sys,locale
>>> sys.getdefaultencoding()
'ascii'
>>> sys.setdefaultencoding() #這裡會報錯,找不到setdefaultencoding()函數
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> reload(sys) #需要reload。
<module 'sys' (built-in)>
>>> locale.getdefaultlocale()
('zh_CN', 'UTF-8')
>>> sys.setdefaultencoding("UTF-8") #把編碼與操作系統統一起來
>>> sys.getdefaultencoding()
'UTF-8'
之所以要reload(sys),因為python環境在初始化的時候要執行site.py這個文件,而為了防止用戶修改python的默認編碼,在site.py文件中會把setdefaultencoding()函數del 掉,因此我們必須通過reload(sys)把這個函數找回來。 有興趣的不妨自己試一下:
先rpm -qa|grep python26
找到python的包
然後rpm -q -l python26-2.6.8-1.el5|grep site.py
找到site.py文件的位置
我的機器上是:/usr/lib64/python2.6/site.py
vi打開,main函數裡面,有一段:
if ENABLE_USER_SITE:
execusercustomize()
# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization. The test for presence is needed when
# this module is run as a script, because this code is executed twice.
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
重新reload一下sys,把setdefaultencoding函數給找回來。再setdefaultencoding就對了。
環境設置正確後,就可以進行編碼轉換了。python中的編碼轉換用decode和encode來實現,unicode編碼可以認為是各種編碼之間轉換的橋梁。
Python3中,已經默認采用utf8編碼了。
Python向PHP發起GET與POST請求 http://www.linuxidc.com/Linux/2014-10/107903.htm
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡