我正在尝试允许用户注册我的服务,我注意到每当有人以他们的名字注册拉丁美洲字符时,就会出现错误。我试着阅读以下几篇SO帖子/网站:
Python regex against Latin-1 character encoding?
http://www.w3.org/TR/2009/WD-html5-20090423/infrastructure.html#character-encodings-0
http://docs.python.org/2/library/json.html
https://pypi.python.org/pypi/anyjson
但还是无法解决。我的代码示例如下:
>>> val = json.dumps({"name":"Déjà"}, encoding="ISO-8859-1")
>>> val
'{"name": "D\\u00c3\\u00a9j\\u00c3\\u00a0"}'
在这种情况下,有没有强制编码同时用于反序列化?感谢任何帮助!在
编辑
客户端是Android和iPhone应用程序。我使用以下库对客户端上的json进行编码:
http://loopj.com/android-async-http/(安卓)
https://github.com/AFNetworking/AFNetworking(ios)
编辑2 服务器从Android客户端收到了相同的文本,如下所示:
^{pr2}$我使用anyjson
来反序列化它,它说:
File "/usr/local/lib/python2.7/dist-packages/anyjson/__init__.py", line 135, in loads
return implementation.loads(value)
File "/usr/local/lib/python2.7/dist-packages/anyjson/__init__.py", line 99, in loads
return self._decode(s)
File "/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py", line 454, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python2.7/dist-packages/simplejson/decoder.py", line 374, in decode
obj, end = self.raw_decode(s)
File "/usr/local/lib/python2.7/dist-packages/simplejson/decoder.py", line 393, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
ValueError: ('utf8', "D\xe9j\xe0", 1, 2, 'invalid continuation byte')
JSON几乎应该总是Unicode格式(编码时),如果您编写的是web服务器,则为UTF-8。在Python 3中,以下内容基本正确:
仔细观察:
^{pr2}$然后可以将val发送到客户机,在Javascript中,
JSON.parse
应该会给出正确的结果。在因为你提到了“当某人注册时”:这意味着数据来自客户端(web浏览器)。数据是如何发送的?你在哪个库中编写web服务器?在
结果发现这主要是因为我是如何从Android端进行编码的。在
我现在在Android中设置
StringEntity
,它现在可以工作了:另外,我在使用
simplejson
的服务器上使用anyjson
。这有时也会造成错误。我转而使用Python的json
库。在相关问题 更多 >
编程相关推荐