私はutf-8でエンコードされた文字列を表すバイトの配列を持っています。これらのバイトをPyton2の文字列にデコードしたい。私は私の全体的なプログラムのためにPython2に依存しているので、Python3に切り替えることはできません。Python2でutf-8バイト配列を文字列にデコードするにはどうしたらいいですか?
array = [67, 97, 102, **-61, -87**, 32, 70, 108, 111, 114, 97]
- >カフェéフローラ
私がしたい文字列内のすべての文字は、必ずしも配列に正確に1バイトで表現されていないので、私のようなソリューションを使用することはできません。
"".join(map(chr, array))
を
0〜127(ASCII)の範囲にない数値が出現するたびに、新しい16ビット整数を作成し、現在のビットを8より左側にシフトして、次のbを追加しますビット単位のORを使用してください。最後に、unichr()を使ってデコードします。
result = []
for i in range(len(byte_array)):
x = byte_array[i]
if x < 0:
b16 = x & 0xFFFF # 16 bit
b16 = b16 << 8
b16 = b16 | byte_array[i+1]
result.append(unichr(m16))
else:
result.append(chr(x))
return "".join(result)
しかし、これは失敗でした。
次の記事は非常によく問題を説明し、nodeJSソリューションが含まれています。UTF-8でそれを
http://ixti.net/development/node.js/2011/10/26/get-utf-8-string-from-array-of-bytes-in-node-js.html
ため
struct.pack
を使用することができます。 – user23571120から128までのすべての数字を「00」で「パッド」することはできませんか? –
あなたがinmy答えを見ることができるように、mapとchrのバージョンでの結合はほとんどうまくいきますが、あなたは負の数を持っています。私の答えは、より読みやすいジェネレータ表現を使用し、負の数を処理することで、同じことが不可欠です。 – jsbueno