探究 encode 和 decode 的使用問題(Python)
阿新 • • 發佈:2018-06-17
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)