【发布时间】:2018-02-27 04:15:21
【问题描述】:
我有以下代码读取用户上传的文件并将其显示在预览页面上,预期的输入文件是纯文本但一些用户抱怨他们收到以下错误,
data = fileObj.read(4194304) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py”, 第 698 行,已读 返回 self.reader.read(size) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py”, 第 501 行,已读 newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa9 in position 15: 无效的起始字节
读取文件的 Python 代码:
def gen():
with codecs.open(file_path, 'r', encoding='utf-8') as fileObj:
while True:
# 4MB chunk (4 * 1024 * 1024 Bytes)
data = fileObj.read(4194304)
if not data:
break
yield data
return Response(gen(), mimetype='text/plain')
如何为生成器编写错误处理程序,它将编码切换为latin-1 并尝试再次读取文件而不是抛出异常?
更新容易失败的示例文件数据:
/*
Copyright � 2017, J. Wayne Schneider - All Rights Reserved
Unauthorized copying of this file, via any medium is strictly prohibited
Proprietary and confidential
Written by J. Wayne Schneider <jwaynes@gmail.com>, May 2017
*/
【问题讨论】:
标签: python