【问题标题】:Handling UTF-16 in a Django uploaded file在 Django 上传的文件中处理 UTF-16
【发布时间】:2009-12-10 22:02:39
【问题描述】:

在我的 Django webapp 中,用户可以在一个位置上传一个文本文件,其中每一行都包含一个将被操作的字符串 - 该文件没有存储在服务器上或类似的东西上。

我的代码如下所示:

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 中的数据的适当方法是什么?

【问题讨论】:

    标签: python django utf-8


    【解决方案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()
    

    对于您的问题: google("django request files") 似乎提供了一些有用的线索;你调查过他们吗,包括this?线索之一是文件上传似乎在 django 的更高版本中得到了改进;你用的是什么版本?

    【讨论】:

    • 谢谢。是的,缺少复制/粘贴是由于当时使用了两台未连接的机器 - 你是对的,有一个错误但修复不完全,我将编辑我的帖子以反映。我确实看到了那个 SO 页面,我在离开后意识到,当我尝试使用最有可能解决问题的答案时,我的设置略有不同,这会阻止它工作。昨天我尝试让它工作时,我已经改进了一些确切的代码。
    • 是的,我是对的,我误用了旧帖子中的示例。现在工作....
    • 为了其他可能遇到此问题的人的利益,请考虑发布您的解决方案。请务必提及它使用的 django 版本。
    猜你喜欢
    • 2017-02-24
    • 1970-01-01
    • 2012-05-20
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多