2016-07-13 2 views
1

これはUTF-8を使用したデコードではありません。これは、バイトオブジェクトをリテラルとして読み込み、解析プロセスを改革せずにバイトオブジェクトとして必要とすることです。そこに私の質問に対する答えがある場合、それは解読についての質問に対する多くの答えの後ろに隠れています。ここでPython 3.4バイトリテラル文字列をバイトオブジェクトに変換する

は、私は必要なものである:

x = "bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')" 
y = ???(x, ???) 
z = bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz') 
if y == z: 
    print ("Yes!") 

それらの疑問符を交換する方法については、任意の提案ですか?

ありがとうございます!

      -- Dave 
+2

'bytearray'リテラルを生成したコードを修正して、より親しみやすいものを生成する方が簡単かもしれません。 –

答えて

1

一つのアプローチは、X(bytearray(b''))からすべての混乱を削除し、その後、我々はちょうどそのバイト表現に各文字を変換し、bytearrayオブジェクトにそれをラップすることです。

x = "bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')" 
y = bytes(ord(c) for c in x[12:-2]) 

以下の第2のアプローチは、bytearrayに限定されるものではなく、あなたは注入から保護するために注意して使用する必要がありますが、あなたはあなたのコンテンツは、あなたがこれを使用することができ、正しい形式であることを確認している場合:

x = r"bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')" 
y = eval(x) 
z = bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz') 

xの接頭辞をr"..."とすると、バックスラッシュがすぐにユニコードシーケンスをxに挿入しないようにする必要があります。したがって、これを動的コンテンツに使用することはできません。標準入力からの文字列またはファイルからの文字列。

ast.literal_eval(x[10:-1])をkindallの提案に使用することもできます。

+0

また、Pythonに 'x = r" bytearray(...) "'のように、文字列全体に 'r'を接頭辞として付けることで、スラッシュをリテラルスラッシュ(エスケープの代わりに)として扱うこともできます(rはこれを" Raw "文脈) – Delioth

+0

@Deliothありがとう、私はそれを知らなかった! – pascalhein

+2

'b '...'にチョップすると' ast.literal_eval() 'を使って' bytes'オブジェクトを取得し、それから 'bytearray()'を呼び出すことができます。 – kindall

関連する問題