我正在尝试通过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"
最后的尝试几乎是好的,除了那些恼人的双重引号。我知道这是因为string是double encoded但是我现在没有其他选择来选择这个解决方案并消除我的tcp客户端代码中的反斜杠。
有人有更好的解决方案吗? 任何提示都非常感谢! 问候, 帕特里克
答案 0 :(得分:0)
您似乎将文本放入源中的response
变量,他们设置源文件编码,以便源文件中的前两行显示:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
更多信息可在PEP 0263中找到。