【问题标题】:Django/Python - Unable to decode FILE UploadDjango/Python - 无法解码文件上传
【发布时间】:2017-08-02 18:02:00
【问题描述】:

我正在使用 Django v1.11 和 Python。我正在尝试上传文件然后解析它。该文件有一些奇怪的编码,所以我最初编写了一个测试脚本并发现该文件使用的是 utf-16 编码。使用那个测试脚本(我在 Django 之外使用的)我使用了:

inputFile = open(inputFilePath, 'rt', encoding='utf-16')  

在使用 Django 时,我无法进行解码。在我的views.py中我使用:

if "specFile" in request.FILES: 
    specFilePath = request.FILES['specFile']
    if(request.POST['specType'] == 'Absorbance'): 
        doStuff(specFilePath)

这是最简单的方法:

def doStuff(specFilePath):
    for line in specFilePath:
        print(line)

在这里我得到编码文本:

b'\xff\xfe#\x00#\x00B\x00L\x00O\x00C\x00K\x00S\x00=\x00 \x006\x00\r'
b'\x00\n'
b'\x00P\x00l\x00a\x00t\x00e\x00:\x00\t\x00e\x001\x00\t\x001\x00.\x003\x00\t\x00P\x00l\x00a\x00t\x00e\x00F\x00o\x00r\x00m\x00a\x00t\x00\t\x00E\x00n\x00d\x00p\x00o\x00i\x00n\x00t\x00\t\x00A\x00b\x00s\x00o\x00r\x00b\x00a\x00n\x00c\x00e\x00\t\x00R\x00a\x00w\x00\t\x00F\x00A\x00L\x00S\x00E\x00\t\x001\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x002\x00\t\x002\x006\x000\x00 \x002\x008\x000\x00 \x00\t\x001\x00\t\x002\x004\x00\t\x003\x008\x004\x00\t\x001\x00\t\x001\x006\x00\t\x00\t\x00\r'
    ...

When putting in  
    line = line.decode(encoding='latin1')

b'\xff\xfe#\x00#\x00B\x00L\x00O\x00C\x00K\x00S\x00=\x00 \x006\x00\r'
b'\x00\n'
b'\x00P\x00l\x00a\x00t\x00e\x00:\x00\t\x00e\x001\x00\t\x001\x00.\x003\x00\t\x00P\x00l\x00a\x00t\x00e\x00F\x00o\x00r\x00m\x00a\x00t\x00\t\x00E\x00n\x00d\x00p\x00o\x00i\x00n\x00t\x00\t\x00A\x00b\x00s\x00o\x00r\x00b\x00a\x00n\x00c\x00e\x00\t\x00R\x00a\x00w\x00\t\x00F\x00A\x00L\x00S\x00E\x00\t\x001\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x002\x00\t\x002\x006\x000\x00 \x002\x008\x000\x00 \x00\t\x001\x00\t\x002\x004\x00\t\x003\x008\x004\x00\t\x001\x00\t\x001\x006\x00\t\x00\t\x00\r'
...

放入时

line = line.decode(encoding='utf-16')

我收到错误消息: UnicodeDecodeError:'utf-16-le' codec can't decode byte 0x0d in position 24: truncated data

我不知道从这里去哪里。还有其他方法可以进行解码吗? 此外,对于此问题中的任何错误或措辞不当,我们深表歉意。这是我提出的第一个 Stack Overflow 问题,而 Django/Python 只是我在药物发现平台开发的科学方面工作中使用的工具。

【问题讨论】:

  • 无论将您的文件分割成多行,都不会意识到它是 UTF16 格式,而是将其分割成一个在这里甚至没有意义的单字节字符。您需要以某种方式让 Django 在行拆分之前将文件视为 UTF16;抱歉,这有点超出我的经验。
  • 你是如何找到编码在utf-16中的?

标签: python django decode encode


【解决方案1】:

我想出了一个似乎可行的相当笨拙的解决方案:

line = line.strip().replace('\xff', '').replace('\xfe', '').replace('\x00', '').rstrip()  

这似乎通过消除 \xff 类型的东西来解决问题。 为了便于参考和谷歌搜索,这些问题来自 Molecular Devices Spectromax 吸光度/荧光酶标仪的数据文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多