Python 的 codecs 模塊是專為處理不同字符編碼(如 UTF-8、GBK、ISO-8859 等)而設計的標準庫。它支持文本文件的編碼轉換、流式讀寫、字符解碼與編碼操作,可作為 open() 的編碼增強版本,尤其適用于處理跨平臺、跨語言環境下的多語言文本文件。
常見應用場景:
(1)讀寫帶特定編碼的文本文件(如 GBK 編碼的中文文件)。
(2)將字符串編碼為字節,或將字節解碼為字符串。
(3)自定義注冊解碼器或編碼器,用于特殊格式。
(4)用于早期 Python 版本中不支持 encoding 參數的文件讀寫。
◆ ◆ ◆
核心概念
1、codecs.open() 是替代內建 open() 的編碼安全版本,適合處理非 UTF-8 文件。
2、encode() 與 decode() 分別是從字符串到字節、從字節到字符串的操作。
3、支持大量內置編碼器,如:utf-8、gbk、big5、latin-1 等。
4、可用于自定義編碼器注冊機制。
5、codecs.StreamReaderWriter 可實現雙向流式轉換。
◆ ◆ ◆
應用舉例
例 1: 讀取 GBK 編碼的文本文件
import codecs
with codecs.open("example_gbk.txt", mode="r", encoding="gbk") as f:
content = f.read()
print(content)例 2:以 UTF-8 編碼寫入文本文件
import codecs
with codecs.open("output_utf8.txt", mode="w", encoding="utf-8") as f:
f.write("你好,世界!Hello, World!")例 3:將字符串編碼為字節,再解碼為字符串
import codecs
text = "編碼測試"
# 編碼為 utf-8 字節
encoded = text.encode("utf-8")
print(encoded) # b'\xe7\xbc\x96\xe7\xa0\x81\xe6\xb5\x8b\xe8\xaf\x95'
# 解碼為原始字符串
decoded = encoded.decode("utf-8")
print(decoded) # 編碼測試例 4:使用 codecs.encode / decode 方法
import codecs
s = "漢字"
b = codecs.encode(s, encoding="utf-8")
print(b) # b'\xe6\xb1\x89\xe5\xad\x97'
s2 = codecs.decode(b, encoding="utf-8")
print(s2) # 漢字例 5:列出 Python 支持的所有編碼格式
import encodings
print(sorted(set(encodings.aliases.aliases.values())))◆ ◆ ◆
常用函數速覽
codecs.BOM_*
一系列常量(如 BOM_UTF8, BOM_UTF16_BE)用于檢測或寫入帶 BOM 的文件頭字節。
適用于判斷或生成 UTF 編碼文件頭。
codecs.decode(obj, encoding='utf-8', errors='strict')
將字節對象 obj 按指定編碼解碼為字符串。
參數:
obj:字節串(bytes 或 bytearray)
encoding:字符編碼名稱,如 utf-8
errors:錯誤處理方式(默認 "strict")
返回:解碼后的字符串
codecs.encode(obj, encoding='utf-8', errors='strict')
將字符串對象 obj 按指定編碼編碼為字節串。
參數:
obj:字符串(str)
encoding:目標編碼名稱
errors:錯誤處理方式
返回:字節對象(bytes)
codecs.getencoder(encoding)
返回一個函數,該函數可將字符串編碼為指定編碼的字節串。
參數:encoding 字符集名稱
返回:編碼函數
codecs.getdecoder(encoding)
返回一個函數,該函數可將字節串解碼為字符串。
參數:編碼名稱
返回:解碼函數
codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=-1)
用于打開帶編碼格式的文件,等價于 open() 的增強版本。
參數:
filename:文件路徑
mode:文件模式,如 'r', 'w'
encoding:指定編碼(如 'utf-8', 'gbk')
errors:錯誤處理方式
返回:文件對象
codecs.lookup(encoding)
查找并返回一個 CodecInfo 對象,包含編解碼器信息。
參數:編碼名稱
返回:CodecInfo 對象,可訪問 .encode, .decode 方法等
◆ ◆ ◆
補充說明
1、codecs.open() 在 Python 3 中功能大部分已被內建 open(..., encoding=...) 取代,但在跨平臺兼容場景下仍常用。
2、處理壓縮文件或網絡流時,可結合 codecs.StreamReaderWriter 實現編碼轉換。
3、可通過 codecs.register() 注冊自定義編碼器,創建自己的文本編碼方案(進階用法)。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.