【发布时间】:2015-07-27 08:24:00
【问题描述】:
我查看了 werkzeug 的源代码和文档,没有指定它打开的模式。由于普通文件的默认打开模式是文本模式,这给我带来了问题。早些时候,我在sqlalchemy中将data=storage.read()保存为LargeBinary类型时遇到问题,报错:can't convert unicode to byte type。
【问题讨论】:
我查看了 werkzeug 的源代码和文档,没有指定它打开的模式。由于普通文件的默认打开模式是文本模式,这给我带来了问题。早些时候,我在sqlalchemy中将data=storage.read()保存为LargeBinary类型时遇到问题,报错:can't convert unicode to byte type。
【问题讨论】:
是的,文件以二进制模式打开。见default_stream_factory() function source:
def default_stream_factory(total_content_length, filename, content_type, content_length=None): """The stream factory that is used per default.""" if total_content_length > 1024 * 500: return TemporaryFile('wb+') return BytesIO()
因此,您要么得到一个以wb+ 模式(读写,二进制)打开的TemporaryFile() 对象,要么得到一个内存中的BytesIO 对象。
【讨论】: