====== python 編碼轉換 ======
主要介紹了python的編碼機制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等編碼之間的轉換。
**常見的編碼轉換分為以下幾種情況:**
===== unicode 轉換為其它編碼(GBK, GB2312等) =====
例如:a為unicode編碼 要轉為gb2312。a.encode('gb2312')
<code python>
# -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
</code>
===== 其它編碼(utf-8,GBK)轉換為unicode =====
例如:a為gb2312編碼,要轉為unicode. unicode(a, 'gb2312')或a.decode('gb2312')
<code python>
# -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8
</code>
===== 非unicode編碼之間的轉換 =====
編碼1(GBK,GB2312) 轉換為 編碼2(utf-8,utf-16,ISO-8859-1)
可以先轉為unicode再轉為編碼2
如gb2312轉utf-8
<code python>
# -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8
</code>
===== 判斷字串的編碼 =====
isinstance(s, str) 用來判斷是否為一般字串 //
isinstance(s, unicode) 用來判斷是否為unicode //
如果一個字串已經是unicode了,再執行unicode轉換有時會出錯(並不都出錯) //
下面代碼為將任一字元串轉換為unicode
<code python>
def u(s, encoding):
if isinstance(s, unicode):
return s
else:
return unicode(s, encoding)
</code>
===== unicode 與其它編碼之間的區別 =====
為什麼不所有的檔案都使用unicode,還要用GBK,utf-8等編碼呢?//
unicode可以稱為抽象編碼,也就是它只是一種內部表示,一般不能直接儲存。//
儲存到磁碟上時,需要把它轉換為對應的編碼,如utf-8和utf-16。
===== 其它方法 =====
除上以上的編碼方法,在讀寫檔案時還可以使用codecs的open方法在讀寫時進行轉換。