Django / Python - 无法解码FILE上传

时间:2017-08-02 18:02:01

标签: python django decode encode

我正在使用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只是我在药物发现平台开发科学方面的工作中使用的工具。

1 个答案:

答案 0 :(得分:0)

我提出了一个看起来很有效的解决方案:

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

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