Python中urllib.urlencodeの場合エラー:UnicodeEncodeError:‘ascii’codec can’t encode characters in position 0

2689 ワード

1.以前に似たような問題が発生し、解決しました.
【解決済み】Python文字列処理エラー:UnicodeDecodeError:‘ascii’codec can’t decode byte 0 xe 6 in position 0:ordinal not in range(128)
結局、ここでまたこのような問題に遭遇しました.本当にpythonの符号化問題に無言になった.
2.現象を見ると、また入力された文字のようで、サポートされていないので、コードを除いて、入力されたいくつかの中国語の変数を含みます.
gVal['newPostPatStr'] ,postDict['category'] ,postDict['titleName'] ,
一度チェックして、Unicodeであることを確認します.そうすれば、unicodeタイプの文字は、本来、サポートされているのではないでしょうか.
結果はやはり間違っていた.
3.試したこともあります.
postData = urllib.urlencode(postDict, True);
しかし、コードされたデータは、すべての中国語が%3 Fになり、明らかに望んでいない.
4.それから長い間振り回されて、やってみました.
?
1
2
3 gVal[ 'newPostPatStr' =   gVal[ 'newPostPatStr' ].encode( "utf-8" ); postDict[ 'category' =   postDict[ 'category' ].encode( "utf-8" ); postDict[ 'titleName' =   postDict[ 'titleName' ].encode( "utf-8" );
実行は可能ですが、結果は望ましくありません.例えば、
“いかなる人”のこの3つの中国語の文字を期待して、コードした後に:%C 8%CE%BA%C 8%CBで、しかし%E 4%BB%BB%E 4%BD%95%E 4%BA%BAを得ました.
5.その後、振り回されて、これでいいです.
?
1
2
3 gVal[ 'newPostPatStr' =   gVal[ 'newPostPatStr' ].encode( "GB18030" ); postDict[ 'category' =   postDict[ 'category' ].encode( "GB18030" ); postDict[ 'titleName' =   postDict[ 'titleName' ].encode( "GB18030" );
なぜなら、私がここで望んでいるのは、GBK(GB 18030)の中国語文字符号化の結果であり、ここではurllibに伝達するからである.urlencode(の対応するkeyのvalueも、GB 18030などの符号化されたUnicodeの文字であって、Unicode自体ではない.
また、Unicodeがコードされているのは、なぜタイプがUtf-8なのか、GB 18030なのか、それともその他なのか、自分のプログラムに対して、どれを使うかを自分ではっきりさせることです.
【まとめ】
Pythonの中のコードに対して、本当に死んで、何度もこのような間違いに出会って、結果はやはり完全に後で類似の間違いを犯すことを避けることができません.
異なる関数のため、必要なパラメータと使い方は、すべて完全に理解する必要があるようで、万が一urllibのように遭遇したら.urlencodeの関数は、パラメータに必要な文字の符号化タイプがわかりません.UnicodeかStrか、Strか、Utf-8かGB 18030か、その他か、など、完全に明らかにしてこそ間違いはありません.
とにかく、これからはこのような関数を使うので、気をつけなければなりません.