python 編碼轉換

來源:互聯網
上載者:User

====== 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方法在讀寫時進行轉換。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.