python編碼問題

2021-04-15 06:07:33 字數 1571 閱讀 4922

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格式才可以,可以使用下面的函式

defread_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屬性值

另外,可以使用乙個小函式來判斷資料的編碼格式:

defencoding(s):

cl =[

'utf8', 

'gb2312']

fora 

incl:

try:

s.decode(a)

return

aexcept

unicodeencodeerror:

pass

return

'unknown'

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 解決問題。在...