2016-04-27 9 views
1

私はpython3.3を使用しています。問題の解読utf-16文字列

b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed:\xf9w\xdaH\xd2?\xcf\xbc.... 

が起こって保持します。私はこのようになり、特定の文字列をデコードしようとしてきました。私はstr.decode('utf-16')を使用して、この文字列をデコードしようとしたときにしかし、私はというエラーを取得:

'utf16' codec can't decode bytes in position 54-55: illegal UTF-16 surrogate 

私はこの文字列をデコードする方法を正確にはわかりません。

+1

つまり、実際にはUTF16ではありません。あなたはどこで文字列を取得しましたか?それはUCS2かもしれませんか? – RemcoGerlich

+0

ポジション53までしかデコードできない場合、結果はOKですか?これはあなたの仮定が正しいかどうかを判断するのに役立ちます。 – mkiever

+0

Twistedから取得しましたが、 'handleResponsePart(self、buffer)'関数の 'twisted/web/proxy.py'に行ったので、' print(buffer) 'を注入しました。だから、基本的には、あなたが見ているエンコードされた文字列は、Twistedプロキシー – Cristian

答えて

3

gzippedデータbegins with \x1f\x8b\x08私の推測では、あなたのデータはgzippedです。デコードする前にgunzipping the dataを試してください。

import io 
import gzip 

# this raises IOError because `buf` is incomplete. It may work if you supply the complete buf 
buf = b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed:\xf9w\xdaH\xd2?\xcf\xbc' 
with gzip.GzipFile(fileobj=io.BytesIO(buf)) as f: 
    content = f.read() 
    print(content.decode('utf-16')) 
+0

ありがとうこれは実際には本当に良い作品! – Cristian