2017-08-02 6 views
0

私はDjango v1.11とPythonで作業しています。ファイルをアップロードして解析しようとしています。ファイルには奇妙なエンコーディングがあるので、私は最初にテストスクリプトを書いて、そのファイルがutf-16エンコーディングを使用していることを発見しました。 (私はジャンゴの外で使用)、テストスクリプト私が使用して:Django/Python - FILEアップロードをデコードできません

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

をジャンゴを使用している場合、私はトラブルデコードを行うが生じています。私のviews.pyでは私が使用します。ここでは

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' 
... 

に入れる簡単な方法になり

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

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はDrug Discoveryプラットフォーム開発の科学的側面で私が使っているツールです。

+0

あなたのファイルを行に分割するのは、それがUTF16であることに気づいていませんし、ここでも意味のない1バイト文字に分割しています。あなたは何とかDjangoにファイルをUTF16とみなす必要があります。申し訳ありませんが、それは私の経験外のビットです。 – jasonharper

+0

これは 'utf-16'でエンコードされていますか? –

答えて

0

私が働くようで、むしろjanky解決策を考え出した:

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

これは、\のXFFタイプのものを排除することによって、トリックを行うようです。 参考のために、これらの問題は、Molecular Devices Spectromax吸光度/蛍光プレートリーダーのデータファイルから生じました。

関連する問題