我正在使用google appengine python 2.5。
我遇到以下代码的unicodedecoderror,因为myuser名称具有以下值
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字符串的最终策略..
我尝试了不同的解决方案来阅读不同的线程..但仍然无法正常工作
答案 0 :(得分:7)
你的问题似乎是你在没有编码已经编码的字符串的情况下调用unicode(userName)
,所以它“默认为当前的默认字符串编码”,这似乎是{{1}在你的情况下。
你可能不应该在任何情况下调用ascii
,如果你知道它是unicode值,那么你已经没事了,如果没有,请用正确的编码调用unicode
。
如果您不确定,请使用.decode
进行测试,因为尝试解码unicode值会导致另一个错误。
答案 1 :(得分:1)
将Python 3代码从Ubuntu Linux 14.04移植到FreeBSD 10.3时,我遇到了类似的问题。当使用Python 3.4.4打开文件时,后一种系统似乎默认使用ASCII而不是UTF-8。
使用文件encoding='utf-8'
命令指定open
解决了我的问题:
open('filepath', encoding='utf-8')