我正在使用
csv
包读取一个 file_picker
文件然后读取数据我正在使用这个代码
final decodedString = utf8.decode(file.bytes);
这给了我以下错误。
Unexpected extension byte (at offset 1014)
我设置
allowMalformed: true
的时候没有报错但是数据不完整,漏掉了csv
文件中的很多行
final decodedString = utf8.decode(file.bytes, allowMalformed: true);
我遇到过很多解决方案,也尝试过使用
latin1
解码,但数据仍然不完整。
一些相关信息分享
我用 Python 编写了一个程序来仔细检查文件是否有问题,它给了我一个类似的错误。
Python代码
import csv
import unicodedata
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader:
print(row)
filename = 'da.csv'
reader = unicode_csv_reader(open(filename))
错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 1014: invalid start byte
工作解决方案
我能够通过在
errors
函数中设置open
参数来解决它。
open(filename, errors="ignore")
我期待
allowMalformed
中的utf8.decode()
像errors
一样解决这个问题,但令我惊讶的是,结果却大不相同。