當前位置:成語大全網 - 書法字典 - Python編碼轉換與中文處理

Python編碼轉換與中文處理

python中的Unicode是壹個令人費解且難以理解的問題。這篇文章寫得很好。utf-8是unicode的壹種實現方式,unicode、gbk、gb2312是編碼字符集。

Python默認腳本文件全部由anscii編碼。當文件中有不在ANSCII編碼範圍內的字符時,應該使用“編碼說明”來糾正模塊的定義。如果。py文件包含中文字符(嚴格來說包含非ANSCII字符),需要在第壹行或第二行指定編碼聲明:# -*- coding=utf-8 -*-或# coding。

其他規範如gbk、gb2312也可;否則,將會出現:

先說python中的字符串類型。python中有兩種字符串類型,即str和unicode,都是從basestring派生出來的。

str文檔裏有壹句話:

也就是說,當讀取壹個文件的內容或者從網絡讀取內容時,要保存的對象是str類型;如果要把壹個字符串轉換成特定的編碼類型,需要先轉換成unicode,再從Unicode轉換成特定的編碼類型,比如utf-8,gb2312等。

Unicode轉換成gb2312、utf-8等。,使用編碼。

Utf-8,GBK使用unicode(s,編碼)或s.decode(編碼)轉換為unicode。

普通字符串被轉換成unicode,

如果直接執行s.encode('gb2312 ')會怎麽樣?

這裏會發生壹個異常:Python會先自動把S解碼成unicode,然後再編碼成gb2312。因為解碼是python自動完成的,而且我們沒有指定解碼方法,所以python會使用sys.defaultencoding指定的方法進行解碼。在很多情況下,sys.defaultencoding是ANSCII,如果s不是這種類型,就會出錯。

就拿上面的情況來說,我的sys.defaultencoding是anscii,S的編碼方式和文件壹樣,都是utf8,所以有錯誤:

在這種情況下,我們有兩種方法來糾正錯誤:

S = '中文'

s.decode('utf-8 ')。編碼(' gb2312 ')`'

導入系統

Reload(sys) # Python2.5初始化後會刪除sys.setdefaultencoding方法,我們需要重新加載。

sys.setdefaultencoding('utf-8 ')

Str = '中文'

字符串編碼(' gb2312 ')

打印打開(" Test.txt ")。閱讀()

導入編解碼器

打印打開(" Test.txt ")。閱讀()。解碼(“utf-8”)

回溯(最近壹次呼叫):

文件“ChineseTest.py ”,第3行,在& lt模塊& gt

打印打開(" Test.txt ")。閱讀()。解碼(“utf-8”)

unicode encoded error:“gbk”編解碼器無法對位置0處的字符u“\ ufe ff”進行編碼:非法的多字節序列

導入編解碼器

data = open("Test.txt ")。閱讀()

if數據[:3] ==編解碼器。BOM_UTF8:

數據=數據[3:]

print data.decode("utf-8 ")

S = "中文"

打印unicode(s,“utf-8”)

回溯(最近壹次呼叫):

文件“ChineseTest.py ”,第3行,在& lt模塊& gt

s = unicode(s,“utf-8”)

UnicodeDecodeError錯誤:“utf8”編解碼器無法解碼位置0-1中的字節:無效數據

S = "中文"

打印unicode(s,“gbk”)

S = "中文"

打印unicode(s,“cp936”)