Python編碼問題

2021-06-17 17:49:29 字數 1206 閱讀 4834

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