【发布时间】: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