CSV 檔案通常用於資料交換,通常包含重音字符,需要 UTF8 編碼才能保持其完整性。然而,Python csvreader 僅支援 ASCII 資料。
嘗試讀取帶有重音法語或西班牙語字符的UTF8 CSV 文件時,儘管使用代碼處理UTF8 編碼,但出現以下異常遇到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)
解決方案在於理解encode方法的用途。它將 Unicode 字串轉換為位元組字串,反之亦然。透過正確利用codecs 模組,特別是codecs.open 來處理UTF8 文字文件,可以簡化程式碼:
<code class="python">import csv def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unicode(cell, 'utf-8') for cell in row] filename = 'da.csv' reader = unicode_csv_reader(open(filename)) for field1, field2, field3 in reader: print field1, field2, field3 </code>
如果輸入資料不是UTF8,例如ISO-8859-1,程式碼需要轉碼:
<code class="python">line.decode('whateverweirdcodec').encode('utf-8')</code>
但是,這通常是不必要的,因為csv 可以直接處理ISO-8859-* 編碼的位元組字串。
以上是讀取 CSV 檔案時如何在 Python 中處理 UTF8 編碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!