2009-12-10 66 views
1

在我的Django网络应用程序中,用户可以在一个位置上传一个文本文件,其中每行包含一个将被操作的字符串 - 该文件未被存储在服务器上或任何其他文件像那样。在Django上传的文件中处理UTF-16

我的代码如下所示:

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

到目前为止,这工作AOK。今天,我有一位用户上传一个导致问题的文件。在Django中使用这些字符串会生成以下错误:

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

用户告诉我他将文件保存为UTF-16。

在适当的蟒蛇,我可以做到以下几点:

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

,然后价值观似乎是可控的,但不能与文件上传。

处理request.FILES中的数据以处理不同的字符集的适当方式是什么?

回答

1

第一部分不回答你的问题(我对django一无所知);我只想指出,如果您提供的代码表明您说的有效或无效,则应该复制/超出您运行的实际代码;不要从内存中键入它。

此代码:

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

有2个问题,看起来像它应该是:

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

你的问题:谷歌( “Django的请求文件”),似乎给了一些有用的线索;你有没有调查过他们,包括this?其中一个线索是,在后来的django版本中,文件上传似乎有所改进;你使用什么版本?

+0

谢谢。是的,缺少复制/粘贴是因为当时使用了两台未连接的机器 - 您说得对,出现了错误,但没有完全解决,我将编辑我的帖子以反映。 我确实看到了SO页面,当我尝试使用最有可能解决问题的答案时,我意识到我已经设置了稍微不同的东西,从而阻止了它的工作。我昨天进化了一些确切的代码,因为我试图让它工作。 – geoffjentry 2009-12-11 15:37:07

+0

是的,我是对的,因为我一直在误用旧帖子中的例子。现在就开始工作...... – geoffjentry 2009-12-11 19:08:56

+0

为了可能出现此问题的其他人的利益,请考虑发布您的解决方案。请说明它与哪个版本的django配合使用。 – 2009-12-11 20:51:15