带Django的UnicodeDecodeError请求.FILE

2024-03-29 15:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在视图调用中有以下代码。。在

def view(request):
    body = u""  
    for filename, f in request.FILES.items():
        body = body + 'Filename: ' + filename + '\n' + f.read() + '\n'

在某些情况下

^{pr2}$

我做错什么了?(我使用的是Django 1.1。)

谢谢。在


Tags: 代码inview视图forreadrequestdef
3条回答

如果从文件中读取的数据是utf-8编码的,则使用utf-8编码,否则使用任何编码。在

首先解码,然后附加到正文例如

data = f.read().decode("utf-8")
body = body + 'Filename: ' + filename + '\n' + data + '\n'

阿努拉格的回答是正确的。然而,这里的另一个问题是,你不能肯定知道用户上传的文件的编码。在最常见的元组上循环,直到找到正确的元组,这可能很有用:

encodings = ('windows-xxx', 'iso-yyy', 'utf-8',)
for e in encodings:
    try:
        data = f.read().decode(e)
        break
    except UnicodeDecodeError:
        pass

Django有一些utilities来处理这个问题(smart-unicode、force-unicode、smart-str)。通常你只需要智能unicode。在

from django.utils.encoding import smart_unicode
def view(request):
    body = u""  
    for filename, f in request.FILES.items():
        body = body + 'Filename: ' + filename + '\n' + smart_unicode(f.read()) + '\n'

相关问题 更多 >