在Django上传文件中处理UTF-16
在我的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的后续版本中似乎得到了改善;你现在使用的是哪个版本呢?