在Django上传文件中处理UTF-16

1 投票
1 回答
1410 浏览
提问于 2025-04-15 16:53

在我的Django网页应用中,有一个地方用户可以上传一个文本文件,这个文件的每一行都包含一个字符串,这些字符串会被处理。这个文件并不会被存储在服务器上。

我的代码大概是这样的:

roFile = request.FILES['uploadFileName']
ros = roFile.read().strip()
ros = ros.split('\n')
ros = [t.strip() for t in ros]

到目前为止,这个功能一直运行得很好。但今天有个用户上传了一个文件,导致了一些问题。在Django中使用这些字符串时出现了以下错误:

ProgrammingError: ERROR: invalid byte sequence for encoding "UTF8":0xff

用户告诉我他把文件保存为UTF-16格式。

在Python中,我可以这样做:

import codecs
from django.utils.encoding import *
fo = codecs.open('filename', 'r', 'utf-16')
zz = fo.readlines()

这样处理后,值似乎可以正常使用,但在文件上传时就不行了。

那么,如何正确处理request.FILES中的数据,以应对不同的字符编码呢?

1 个回答

1

这部分内容并没有直接回答你的问题(我对django一无所知);我只是想提醒你,当你提供代码并说它有效或无效时,最好是直接复制粘贴你实际运行的代码,而不是凭记忆输入。

这段代码:

import codecs
from django.utils.encoding
f = codecs.open('filename', 'r', 'utf-16')
zz = fo.readlines()

存在两个问题,正确的写法应该是:

import codecs from django.utils.encoding
fo = codecs.open('filename', 'r', 'utf-16')
zz = fo.readlines()

关于你的问题:在谷歌上搜索“django request files”似乎能找到一些有用的线索;你有没有去研究一下这些线索,包括这个链接?其中一个线索是,文件上传在django的后续版本中似乎得到了改善;你现在使用的是哪个版本呢?

撰写回答