1. 程式人生 > >探究 encode 和 decode 的使用問題(Python)

探究 encode 和 decode 的使用問題(Python)

gbk nco com 程序 mage python 文件 height pre


很多時候在寫Python程序的時候都要在頭部添加這樣一行代碼

#coding: utf-8

或者是這樣

# -*- coding:utf-8 -*-

等等

這行代碼的意思就是設定同一編碼格式為utf-8

計算機中存儲數據的編碼方式多種多樣, 常用的有 unicode, utf-8, gbk, 等等

在Windows系統下,文本文件默認保存的格式應該是gbk

在以一種編碼格式保存文件時,應該使用相同的編碼進行解析此文件, 不然可能會出現亂碼情況


今天就是想記錄一下我在寫Python程序時,在解析字符串字符串時何時使用decode, 何時使用encode

通常從非unicode編碼轉換為unicode編碼使用decode(解碼),相反從unicode編碼轉換為非unicode編碼使用encode(編碼)

#coding: utf-8

L = [你好]
print L  

輸出

技術分享圖片

現在是utf-8編碼, 一個漢字占3個字節

使用decode進行解碼,將 “你好” 的編碼轉換為unicode

#coding: utf-8

L = [你好]
print [L[0].decode(utf-8)] 

輸出

技術分享圖片

可以看到成功轉化為unicode編碼, 並且一個漢字占2個字節

那我現在想讓utf-8編碼的 “你好” 轉換為gbk該如何操作呢?

這樣試一下

#coding: utf-8

L 
= [你好] print [L[0].encode(gbk)] #錯誤示例

出現了錯誤

技術分享圖片

正確的方式就是先將 utf-8 使用decode轉換為 unicode , 在將 unicode 使用encode轉換為想要的編碼gbk

#coding: utf-8

L = [你好]
print [L[-1].decode(utf-8).encode(gbk)]   # utf-8 -> unicode -> gbk

輸出

技術分享圖片

成功轉化為gbk編碼, 並且一個漢字占2個字節


總結

(非unicode編碼).decode(‘非unicode‘) 轉換為unicode

(unicode編碼).encode(‘非unicode‘) 轉換為非unicode

如果想要從一種非unicode編碼轉換為另外一種非unicode編碼, 需要借助unicode作為跳板先進行decode, 再進行encode


本節完......

探究 encode 和 decode 的使用問題(Python)