Python 內建的 csv 模組預設無法處理 UTF-16, 直接讀的話會出現
Error: line contains NULL byte
自行轉換編碼成 UTF-8 即可,作法如下:
import codecs
import csv
# 用 codecs 解碼 utf-16 為 unicode object
f = codecs.open(filename, 'rU', 'utf-16')
# 再轉回 utf-8 給 csv.reader 用
cr = csv.reader(line.encode('utf-8') for line in lines)
for row in cr:
# row 的內容就是 CSV parse 完的結果
或是先用 iconv 轉檔, 再用 Python csv 模組處理亦可:
$ iconv -f utf-16 -t utf-8 file_in_utf16 > file_in_utf8
備註: Python csv 模組不接受 unicode 的輸入,若來源不是檔案,也要記得轉成 utf-8 再傳入 csv.reader()
沒有留言:
張貼留言