如何在Python中通过tcp发送utf8编码的json字符串?

时间:2015-02-04 16:17:14

标签: python json unicode tcp

我正在尝试通过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客户端代码中的反斜杠。

有人有更好的解决方案吗? 任何提示都非常感谢! 问候, 帕特里克

1 个答案:

答案 0 :(得分:0)

您似乎将文本放入源中的response变量,他们设置源文件编码,以便源文件中的前两行显示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

更多信息可在PEP 0263中找到。