Python編碼問題

python裏面基本上要考慮三種編碼格式:
1 源文件編碼
在文件頭部使用coding聲明。告訴python解釋器該代碼文件所使用的字符集。
#/usr/bin/python
#coding: utf8

2 內部編碼
代碼文件中的字符串,經過decode以後,被轉換爲統一的unicode格式的內部數據,類似於u'*'。unicode數據可以使用encode函數,再自由轉換爲其他格式的數據,相當於一個統一的平臺。

直接輸入unicode數據
>>> u'你好'
u'\u4f60\u597d'

將unicode數據轉換爲gb2312格式
>>> u'你好'.encode('gb2312')
'\xc4\xe3\xba\xc3'

將輸入的gb2312格式的數據解碼爲unicode
>>> '你好'.decode('gb2312')
u'\u4f60\u597d'
輸入數據的格式取決於所用shell終端的編碼設置,本例中爲zh_CN
[root@chenzheng python]# echo $LANG
zh_CN

解碼同時轉換爲utf8
>>> '你好'.decode('gb2312').encode('utf8')
'\xe4\xbd\xa0\xe5\xa5\xbd'

3 外部輸入的編碼
其實這個和在python交互shell中輸入的字符串,所遇到的情況基本一樣。但程序中常常用到從網絡,文件讀取的數據,故此單獨列出,需要特別注意其編碼格式是否於系統要求相符。

下面是baidu中文本週金曲榜的鏈接,返回一個xml文件,編碼格式爲gb2312
http://box.zhangmen.baidu.com/x?op=4&listid=1

由於xml.etree.EelementTree.parse()不識別gb2312編碼,在解析的時候,需要將其轉換utf8格式纔可以,可以使用下面的函數
def read_page(url):
"""讀取gb2312編碼的xml文件,轉換爲utf8格式"""
import urllib
udata = urllib.urlopen(url).read().decode('gb2312')
u8data = udata.encode('utf8')
return u8data.replace('gb2312', 'utf-8') #簡單替換xml文件第一行的encoding屬性值



參考:

http://www.iteye.com/topic/560229


http://www.cnblogs.com/itech/archive/2011/03/28/1997212.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章