2017-06-01 1 views
3

私はこれが繰り返される疑問であると理解しますが、解決策を見つけるのが難しいです。要するにPython 3デコードストリング

私はデコードしたい文字列を持っている:

文字列

'"my quote"' 

ノートの最後の点から期待さ

raw = "\x94my quote\x94" 
string = decode(raw) 

は、私は、Python 3で働いているということですのでrawですしたがって、既にデコードされている。それで、"\x94"文字を「デコードする」ために正確に何をする必要がありますか?

+0

は、あなたのウェブサイトのスクレイピングは、Unicodeにデータを復号化するために、間違ったエンコーディングを使用していました。理想的には、結果の代わりにウェブサイトを読むコードを修正します。それ以外の場合は、誤って適用されたエンコードでエンコードして問題を取り消し、正しいものでデコードします。 –

+0

私はちょうど 'urllib.request.urlopen'を使用しています。要求がどのようにデコードされるかを変更するオプションはありません。私の選択した答えで指摘されているように、私の直面する問題の解決策は "latin-1"でエンコードし、次に "windows-1252"でデコードすることでした。これは妥当なアプローチですか、それともルートの問題を解決する方法がありますか? – rmorshea

+0

これは妥当なアプローチですが、コードを再現可能な例で見ることなく、Webサイトを参照することはできません。 –

答えて

3
string = "\x22my quote\x22" 
print(string) 

あなたはPython 3があなたのためにすることを行い、デコードする必要はありませんが、異なる文字セットを持っているしかし、もしあなたは二重引用符"

の正しい制御文字を必要とし、それあなたの文字列がバイト文字列のヨーヨーではない場合

str(b"\x94my quote\x94", "windows-1252") 

:あなたは、Windows-1252を持って表示され、その後、あなたはその文字セットからバイト文字列をデコードする必要がありますUは私が仕事にLatin-1エンコーディングを発見し、それを最初にエンコードする必要があります:あなたはこれに意味場合

string = "\x94my quote\x94" 
str(string.encode("latin-1"), "windows-1252") 
+0

Hmmm、よく '" \ x94 "'は私の選択の入力ではなく、私が解析しているウェブサイトからのもので、 'print'がデコード文字列をstdoutに送るかもしれませんが、変数をキャプチャします – rmorshea

+0

これは変数として取り込まれます。私はPythonでstrを書くだけで ''" myquote "''を出力します。 – CodeMonkey

+0

@rmorshea別の文字セットの文字列のデコードを含める答えを修正しました – CodeMonkey

1

このように試しましたか? byteクラスのメソッドとしてdecodeを呼び出し、utf-8を引数として渡す必要があると思います。文字列の前にbを追加してください。

string = b"\x94my quote\x94" 
decoded_str = string.decode('utf-8', 'ignore') 
print(decoded_str) 
+1

これは「AttributeError」です... –

+1

あなたが_think_の場合は、 – CIsForCookies

+0

私のせいで、訂正しました。そして、あなたは正しいです、それは中毒ですが、私の反応がそれほど悪くなるようになると、それは寝る時間です。 (: –

2

は、私にはわからないが、これは動作します:

some_binary = a = b"\x94my quote\x94" 
result = some_binary.decode() 

そして、あなたが得ましたあなたが選択するためにどのエンコーディングがわからない場合は、結果... は、あなたがchardet.detectを使用することができます:あなたはすでにUnicode文字列を持っている場合は

import chardet 
chardet.detect(some_binary)