decode,encode的用法


python內部的字符串一般都是 Unicode編碼。代碼中字符串的默認編碼與代碼文件本身的編碼是一致的。所以要做一些編碼轉換通常是要以Unicode作為中間編碼進行轉換的,即先將其他編碼的字符串解碼(decode)成 Unicode,再從 Unicode編碼(encode)成另一種編碼。

  • decode 的作用是將其他編碼的字符串轉換成 Unicode 編碼,eg name.decode(“GB2312”),表示將GB2312編碼的字符串name轉換成Unicode編碼
  • encode 的作用是將Unicode編碼轉換成其他編碼的字符串,eg name.encode(”GB2312“),表示將unicode編碼的字符串name轉換成GB2312編碼

所以在進行編碼轉換的時候必須先知道 name 是那種編碼,然后 decode 成 Unicode 編碼,最后載 encode 成需要編碼的編碼。當然了,如果 name 已經就是 Unicode 編碼了,那么就不需要進行 decode 進行解碼轉換了,直接用 encode 就可以編碼成你所需要的編碼。值得注意的是:對 Unicode 進行編碼和對 str 進行編碼都是錯誤的。

eg:
由於內置函數 open() 打開文件時,read() 讀取的是 str,讀取后需要使用正確的編碼格式進行 decode()。write() 寫入時,如果參數是 Unicode,則需要使用你希望寫入的編碼進行 encode(),如果是其他編碼格式的 str,則需要先用該 str 的編碼進行 decode(),轉成 Unicode 后再使用寫入的編碼進行 encode()。如果直接將 Unicode 作為參數傳入 write() ,python 將先使用源代碼文件聲明的字符編碼進行編碼然后寫入。

  1. # coding: UTF-8
  2.  
  3. fp1 = open('test.txt', 'r')
  4. info1 = fp1.read()
  5. # 已知是 GBK 編碼,解碼成 Unicode
  6. tmp = info1.decode('GBK')
  7.  
  8. fp2 = open('test.txt', 'w')
  9. # 編碼成 UTF-8 編碼的 str
  10. info2 = tmp.encode('UTF-8')
  11. fp2.write(info2)
  12. fp2.close()
  13. 先知道info1是字符串,其編碼為GBK,將其解碼成unicode.存在tmp中。再將其編碼成utf-8,存在info2中。這樣寫入fp2文件中的內容就是utf-8格式的了。那么能保證fp2中的內容編碼一致,都是utf-8
  14. utf-8也能顯示中文。它是可變長的編碼方式,可以使用 1~4 個字節表示一個字符,可根據不同的符號而變化字節長度。
  15. python3中默認文件為utf-8格式。字符串不需使用.decode()。其作為unicode編碼。可以直接使用encode編碼為其他。
  16. 獲取系統默認編碼
    1. import sys
    2. print sys.getdefaultencoding()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM