Django:上传的文件是二进制文件。是否有可能改为utf?所以readline()返回unicode而不是字节

时间:2014-11-03 22:28:01

标签: python django unicode

使用Python 3在Django(1.7)中上传文件:

f = form.files['file']
f.__repr__()

输出

<InMemoryUploadedFile: index.html (text/html)>

如果我拨打f.readline(),我会收回字节数。 通常情况下没关系,我可以只读取文件并对其进行解码,但是在这种情况下我将文件传递给另一个期望在它接收的参数上调用readline()的函数,并且{{{ 1}}需要返回unicode而不是字节。

是否可以在readline()的实例上设置编码等,因此readline会返回unicode而不是字节?或者我是否必须先使用InMemoryUploadedFile读取整个文件,然后将StringIO的实例传递给我的函数?

1 个答案:

答案 0 :(得分:5)

处理此问题的一般方法可能是write a custom upload handlertell Django to use it。但我从来没有这样做过,所以我不确定。

但是一个简单的方法就是包装底层文件对象。 (如果您使用TextIOWrapper代替StringIO,则无需担心开销。)

from io import TextIOWrapper

f = form.files['file']
text_f = TextIOWrapper(f.file, encoding='utf-8')