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
由於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屬性值
參考:
Python編碼問題
tag python,encoding,unicode 現有的字元編碼 ascii,gbk,gb2312,utf 8,unicode.unicode可以用來表示所有語言的字元,而且是定長雙位元組 也有四位元組的 編碼,包括英文本母在內。python中定義乙個unicode字串和定義乙個普通字串一樣簡...
python編碼問題
python裡面基本上要考慮三種編碼格式 1 原始檔編碼 在檔案頭部使用coding宣告。告訴python直譯器該 檔案所使用的字符集。usr bin python coding utf8 2 內部編碼 檔案中的字串,經過decode以後,被轉換為統一的unicode格式的內部資料,類似於u uni...
Python編碼問題
實現過程如下 import sys 獲取現在系統的編碼格式 type sys.getfilesystemencoding file r h musicpack 004.奈落 花 今日的 5年2班.轉換成現在系統的編碼 file file.decode utf 8 encode type 解決問題。在...