我正在使用Django v1.11和Python。我試圖上傳一個文件,然後解析它。該文件有一些奇怪的編碼,所以我最初寫了一個測試腳本,發現該文件使用utf-16編碼。與測試腳本(這在我以前的Django以外)我使用:Django/Python - 無法解碼FILE上傳
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;對不起,這有點超出我的經驗。 – jasonharper
你是如何找到用'utf-16'編碼的? –