PythonデコードUnicodeはサポートされていません


81

Pythonでのエンコーディングに問題があります。さまざまな方法を試しましたが、出力をUTF-8にエンコードするための最良の方法が見つからないようです。

これは私がやろうとしていることです:

result = unicode(google.searchGoogle(param), "utf-8").encode("utf-8")

searchGoogleの最初のGoogle結果を返しますparam

これは私が得るエラーです:

exceptions.TypeError: decoding Unicode is not supported

このエラーを回避するためにPythonに出力をUTF-8でエンコードさせる方法を知っている人はいますか?

回答:


102

google.searchGoogle(param)すでに戻っているようunicodeです:

>>> unicode(u'foo', 'utf-8')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    unicode(u'foo', 'utf-8')
TypeError: decoding Unicode is not supported

だからあなたが欲しいのは:

result = google.searchGoogle(param).encode("utf-8")

ちなみに、コードはutf-8エンコードされた文字列を返すことを想定しているので、同じエンコードを使用してデコード(を使用unicode())してエンコードを元に戻す(を使用)ことのポイントは何でした.encode()か?


4
正直なところ、unicode()何が起こっているのかを理解しようと騙されていました。どうもありがとうございました:
simonbs 2011年

2
今私は時々得るでしょうascii' codec can't decode byte 0xc3 in position。それがなぜなのか知っていますか?
simonbs 2011年

2
私が提案した行で?次に、searchGoogle()が0xC3バイトの文字列を返したことを意味します。これを呼び出す.encode()と、Pythonは最初にUnicodeに変換しようとします(ASCIIエンコーディングを使用)。searchGoogle()がUnicodeを返すことがあり、文字列を返すことがある理由がわかりません。多分それはあなたがそれを与えるものに依存しますparamか?1つのタイプに固執してみてください。
ヤク2011年

65
Unicodeにキャストするための安全で簡単な方法があればいいのにと思います。
エリックウォーカー

@EricWalkerすでにUnicodeになっている場合はparamを変更せずにdef uors2u(object, encoding=..., errors=...)返すobject、strの場合は変換するような厄介なヘルパー関数を書くことができます。ただし、このコードはにおいがします。すべての入力を外部(ファイルシステムなど)から受信したらすぐにUnicodeに変換し、必要に応じて変換してから返送する必要があります。strをunicodeに変換する場所は1つだけなので、私が説明したようなヘルパー関数は必要ありません。
しし座
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.