这个问题在这里已有答案:
我有一个CSV文件,我通过HTML表单上传到Python API
API看起来像这样:
@app.route('/add_candidates_to_db', methods=['GET','POST'])
def add_candidates():
file = request.files['csv_file']
x = io.StringIO(file.read().decode('UTF8'), newline=None)
csv_input = csv.reader(x)
for row in csv_input:
print(row)
我找到了导致问题的文件部分 . 在我的文件中它有 Í
字符 .
我收到此错误: UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 1317: invalid continuation byte
我以为我用_1783983解码它或者在 file.read()
之前发生了错误?
我该如何解决?
编辑:我控制了文件 . 我通过拉取数据自己创建CSV文件(有时这些数据有奇怪的字符) .
一个是服务器端,我正在读取文件中的每一行并插入数据库 .
2 回答
您的数据不是UTF-8,它包含错误 . 您说您正在生成数据,因此理想的解决方案是生成更好的数据 .
不幸的是,有时我们无法获得高质量的数据,或者我们的服务器会给我们带来垃圾,我们必须将其整理出来 . 对于这些情况,我们可以在解码文本时使用不太严格的错误处理 .
代替:
您可以使用:
这将使得任何“垃圾”字符(任何未正确编码为UTF-8的字符)都将被替换为U FFFD,如下所示:
您说您的文件具有
Í
字符,但您可能正在使用UTF-8以外的编码查看该文件 . 你的文件应该包含Í
,还是只是mojibake?也许你可以弄清楚角色应该是什么,从中你可以找出你的数据使用的编码,如果它不是UTF-8 .您的文件似乎未在utf8中编码 . 您可以尝试使用all the encodings that Python understand读取文件,并检查哪个文件可以读取文件的全部内容 . 试试这个脚本:
其中
file
再次是您文件的文件名 .