我遇到了处理非ascii POST参数的问题。这是一个显示问题的CURL请求:
curl "http://localhost:8000/api/txt/" -d \
"sender=joe&comments=Bus%20%A3963.33%20London%20to%20Sydney"
comments
中的英镑签名导致了这个问题:当我尝试使用request.POST['comments']
执行任何操作时,我得到了:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 4: ordinal not in range(128)
例如,如果我只是尝试记录comments
是什么:
message = request.POST.get('comments', None)
file('/tmp/comments.txt', 'wb').write(message)
我收到上述错误。或者当我尝试解码时,我得到同样的错误:
try:
message = message.decode('ISO-8859-2','ignore').encode('utf-8','ignore')
except Exception, e:
file('/tmp/ERROR-decode.txt','w').write(str(e))
使用:
生成ERROR-decode.txt
'ascii' codec can't encode character u'\ufffd' in position 4: ordinal not in range(128)
想法?
答案 0 :(得分:2)
%A3
错了。事实上它应该是%C2%A3
或%C5%81
才能正确使用UTF-8。
答案 1 :(得分:0)
我认为你必须首先将它传递给urllib.unquote()以删除HTTP执行的引用,然后,你可以使用正确的编码将字符串转换为unicode
>>> unicode(urllib.unquote("Bus%20%A3963.33%20London%20to%20Sydney"), \
"iso-8859-2").encode("utf-8")
'Bus \xc5\x81963.33 London to Sydney'