【发布时间】:2015-04-04 06:12:26
【问题描述】:
我拼命地试图通过 tcp (Python 2.7) 发送一个 utf8 编码的 json 字符串。这里有一些尝试和结果。变量响应包含我要发送的 json 字符串:
reponse = {"candidats":{"P":[{"mentionname":"Beyoncé","guess":[{"name":"BEYONCÉ","score":"1.00","eid":"72437"}]}],"E":[]}}
命令1:
self.request.sendall(json.dumps(reponse+"\n",ensure_ascii=False))
导致错误:
'ascii' codec can't encode character u'\xe9' in position 49: ordinal not in range(128)
命令2:
self.request.sendall(json.dumps(reponse+"\n",encoding='utf8')):
在另一端(tcp 客户端)提供输出,但 Beyoncé 的最后一个字符不是好字符:
"{\"candidats\":{\"P\"[{\"mentionname\":\"Beyonc\u00e9\",\"guess\":[{\"name\":\"BEYONC\u00c9\",\"score\":\"1.00\",\"eid\":\"72437\"}]}],\"E\":[]}}\n"
(客户端使用 message.decode('UTF-8') 收到消息)。
命令3:
self.request.sendall(json.dumps(reponse+"\n",ensure_ascii=False,encoding='utf8')):
导致错误:
'ascii' codec can't encode character u'\xe9' in position 49: ordinal not in range(128)
命令4:
self.request.sendall(json.dumps(reponse+"\n").encode('utf8')):
在另一端(tcp 客户端)提供输出,但 Beyoncé 的最后一个字符不是好字符:
"{\"candidats\":{\"P\":[{\"mentionname\":\"Beyonc\u00e9\",\"guess\":[{\"name\":\"BEYONC\u00c9\",\"score\":\"1.00\",\"eid\":\"72437\"}]}],\"E\":[]}}\n"
命令5:
self.request.sendall(json.dumps(reponse+"\n",ensure_ascii=False).encode('utf8')):
在另一端给出输出,Beyoncé 的最后一个字符是好的,但双引号被转义:
"{\"candidats\":{\"P\":[{\"mentionname\":\"Beyoncé\",\"guess\":{\"name\":\"BEYONCÉ\",\"score\":\"1.00\",\"eid\":\"72437\"}]}],\"E\":[]}}\n"
最后一次尝试几乎是好的,除了那些烦人的转义双引号。我知道这是因为字符串是double encoded,但目前我没有其他选择来选择这个解决方案并消除我的 tcp 客户端代码中的反斜杠。
有人有更好的解决方案吗? 非常感谢任何提示! 问候, 帕特里克
【问题讨论】: