5

我正在使用谷歌 appengine python 2.5。

我在以下代码上遇到 unicodedecoderor,因为我的用户名具有以下值

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)

请指导出了什么问题..或者你可以..

以及在appengine python上处理unicode字符串的最终策略应该是什么。

我尝试了不同的解决方案阅读不同的线程..但仍然没有用

4

2 回答 2

7

你的问题似乎是你在unicode(userName)没有编码的情况下调用你已经编码的字符串,所以它“默认为当前的默认字符串编码”,这似乎是ascii你的情况。

在任何情况下,您可能都不应该调用unicode,如果您知道它是一个 unicode 值,那么您已经很好了,如果没有,请.decode使用正确的编码进行调用。
如果您不确定,请测试使用,isinstance因为尝试解码 unicode 值将导致另一个错误。

于 2012-07-07T19:21:10.480 回答
2

在将 Python 3 代码从 Ubuntu Linux 14.04 移植到 FreeBSD 10.3 时,我遇到了类似的问题。在使用 Python 3.4.4 打开文件时,后一种系统似乎默认使用 ASCII 而不是 UTF-8。

encoding='utf-8'使用 file命令指定open解决了我的问题:

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