1

私は現在、ユーザーからの入力 (テキスト) を取得し、後で再配布するためにデータベースに保存する Python スクリプト (appengine) を使用しています。

入ってくるテキストは、エンコードに関しては不明であり、一度だけエンコードする必要があります。

クライアントからのテキストの例:

  • この%20is%20a%20test
  • これはテストです

今Pythonで私ができると思ったのは、それをデコードしてからエンコードすることで、両方のサンプルが次のようになります。

  • この%20is%20a%20test
  • この%20is%20a%20test

私が使用しているコードは次のとおりです。

#
# Dencode as UTF-8
#
pl = pl.encode('UTF-8')

#
#Unquote the string, then requote to assure encoding
#
pl = urllib.quote(urllib.unquote(pl))

ペイロードのPOSTplパラメータからの場所。

問題

問題は、特殊な (中国語、アラビア語) 型の文字を取得することがあり、次のエラーが発生することです。

'ascii' codec can't encode character u'\xc3' in position 0: ordinal not in range(128)
    ..snip..
    return codecs.utf_8_decode(input, errors, True)
 UnicodeEncodeError: 'ascii' codec can't encode character u'\xc3' in position 0: ordinal not in range(128)

上記の問題を考慮して、文字列を処理するための最良の解決策を知っている人はいますか?

ありがとう。

4

1 に答える 1

1

交換

pl = pl.encode('UTF-8')

pl = pl.decode('UTF-8')

バイト文字列を文字列にデコードしようとしているためです。

Python 2 の設計上の問題により.encode、バイト文字列 (既にエンコードされている) を自動的に ASCII としてデコードすることができます (これが、ASCII 文字列では機能するようで、非 ASCII バイトでのみ失敗する理由です)。

于 2012-07-26T05:56:20.870 に答える