5

私はgoogleappenginepython2.5を使用しています。

myuser名に次の値があるため、次のコードでunicodedecoderrorが発生しています

userName     = unicode(userName).encode('utf-8') # äºï¼égãwmj is value in this variable  

userName     = unicode(userName).encode('utf-8')
strData = '{\"Sid\" :1, \"Oppid\" :%s, \"Aid\" :%s, \"EC\" :\"%s\", \"Name\" :\%s"' % (enemyID, userID, userEmpCode,userName)


   params = {'deviceToken'   : oDeviceToken,
              'message'       : strMessage,
              'CertificateId' : certificateId,
              'Data'          : strData
             }


result = urlfetch.fetch(url = url,
             payload = urllib.urlencode(params),
             method  = urlfetch.POST,
             headers = {"Authorization" : authString},
             deadline = 30
             )

ペイロードとして送信できるように、ユーザー名に対して次の手順を実行してutf-8にエンコードしています。

username = unicode(username).encode(utf-8)

電話するとエラーが発生すると思いますurllib.urlencode(params)

何がうまくいかないかを教えてください..またはあなたは..

そして、appenginepythonでUnicode文字列を処理するための究極の戦略は何である必要があります。

さまざまなスレッドを読み取ってさまざまなソリューションを試しましたが、それでも機能しませんでした

4

2 に答える 2

7

問題は、既にエンコードされた文字列をエンコードせずに呼び出しているように見えるunicode(userName)ため、「デフォルトで現在のデフォルトの文字列エンコーディングに設定される」ことasciiです。

unicodeユニコード値であることがわかっている場合は、おそらく呼び出してはいけません。そうでない場合は.decode、正しいエンコーディングで呼び出してください。
よくわからない場合はisinstance、Unicode 値をデコードしようとするとさらに別のエラーが発生するため、使用してテストしてください。

于 2012-07-07T19:21:10.480 に答える
2

Python 3 コードを Ubuntu Linux 14.04 から FreeBSD 10.3 に移植するときに、同様の問題が発生しました。後者のシステムは、Python 3.4.4 でファイルを開くときに、デフォルトで UTF-8 ではなく ASCII を使用するようです。

encoding='utf-8'fileopenコマンドで指定すると、問題が解決しました。

open('filepath', encoding='utf-8')
于 2016-03-30T16:34:04.963 に答える