Python 中的Unicode (UTF-8) 檔案I/O
在Python 中,處理文件中的Unicode 文字涉及編碼和編碼解碼操作。然而,理解這些概念可能具有挑戰性,如一個常見問題所示:
解碼混亂:
考慮Python 2.4 中的以下程式碼:
<code class="python">ss = u'Capit\xe1n' ss8 = ss.encode('utf8') print(ss, ss8)</code>
此程式碼輸出:
Capit\xe1n b'Capit\xc3\xa1n'
a 銳音字元(á) 在Unicode (u'Capitxe1n') 和UTF-8 (ss8 = 'Capitxc3xa1n') 中的表示方式不同。列印 ss8 時,Python 預設使用 ASCII 表示形式,因此是 xc3xa1n 序列。
以寫入模式開啟檔案「f1」並寫入 ss8 會導致「Capitxc3xa1nn」寫入該檔案。相反,當將 ss 寫入另一個檔案「f2」時,Python 會嘗試將 a-acute 字元解釋為轉義序列,結果是「Capitxc3xa1nn」。
解碼解決方案:
要解決此混亂,請在開啟檔案時明確指定編碼。在 Python 2.6 及更高版本中,可以使用 io.open 函數:
<code class="python">import io f = io.open("test", mode="r", encoding="utf-8")</code>
這種方法可以確保檔案以 UTF-8 方式讀寫,無需手動編碼和解碼。在Python 3.x中,io.open函數是內建open函數的別名,它也支援encoding參數。
或者,可以使用codecs模組:
<code class="python">import codecs f = codecs.open("test", "r", "utf-8")</code>
需要注意的是,混合使用 read() 和 readline() 方法可能會在使用codecs.open 時導致問題。
以上是如何在Python中正確讀寫Unicode(UTF-8)檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!