5

この文字列を取得しました'Velcro Back Rest \xa36.99'u前面にはありませんのでご注意ください。単なるアスキーです。

どうすればユニコードに変換できますか?

私はこれを試しました、

>>> unicode('Velcro Back Rest \xa36.99')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 17: ordinal not in range(128)

この答えはそれをうまく説明しています。しかし、その質問のOPと同じ質問があります。そのコメントへの答えで、ウィンストンは「文字列オブジェクトをエンコードするべきではありません...」と言います

しかし、私が取り組んでいるフレームワークでは、Unicode 文字列に変換する必要があります。私はスクレイピーを使用しており、この行があります。

loader.add_value('name', product_name)

ここproduct_nameには問題のある文字列が含まれており、エラーがスローされます。

4

1 に答える 1

16

バイトを Unicode にデコードするには、次のようにエンコードを指定する必要があります。

>>> 'Velcro Back Rest \xa36.99'.decode('latin1')
u'Velcro Back Rest \xa36.99'
>>> print 'Velcro Back Rest \xa36.99'.decode('latin1')
Velcro Back Rest £6.99

この場合、経験からエンコーディングを推測することができました。遭遇した各エンコーディングに使用される正しいコーデックを提供する必要があります。Web データの場合、通常は content-type ヘッダーの from に含まれます。

Content-Type: text/html; charset=iso-8859-1

iso-8859-1たとえば、Latin 1 エンコーディングの正式な標準名です。Python はlatin1のエイリアスとして認識しiso-8859-1ます。

入力データはプレーン ASCIIではないことに注意してください。そうであれば、0 から 127 までの範囲のバイトのみを使用します。\xa3は 10 進数で 163 であるため、ASCII の範囲外です。

于 2013-06-20T17:06:15.340 に答える