JSON为汉字转换错误

时间:2013-10-13 04:52:21

标签: jquery python-3.x json

我有一个中文字符串“普派”,我希望使用HTTP POST请求从客户端传输到Web服务器。在客户端,我使用以下jquery代码:

$.ajax({
    url: 'http://127.0.0.1:8000/detect/word',
    type: 'POST',
    data: JSON.stringify('普派'),
    success: function(msg) {
        alert(msg);
    }
});

在服务器端,我使用python 3.3:

class DictRequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        post_data = self.rfile.read(int(self.headers['Content-Length']))
        post_var = json.loads(post_data.decode())

但结果(post_var)很乱。 post_data类型的变量bytes是: b'“\ xc3 \ xa6 \ xe2 \ x84 \ xa2 \ xc2 \ xae \ xc3 \ xa6 \ xc2 \ xb4 \ xc2 \ xbe”',但为了正确转换,它应该是b'“\ u666e \ u6d3e”'(由json.dumps("普派").encode()获得。你能帮我解决一下这个问题吗?非常感谢你。

1 个答案:

答案 0 :(得分:2)

JSON.stringify('普派')的结果取决于源文件的编码。请记住,引号之间真正的只是一堆字节,只是你的编辑器(或浏览器)将它显示为“普派”。
 如果浏览器正确检测到您的源编码,那么它应该不重要,但如果没有,那么您将最终得到垃圾。
因此,请确保提供正确的文件编码(最好是utf-8)。

要独立于此类与浏览器相关的解释,请尝试将其更改为JSON.stringify("\u666e\u6d3e")

json标准并未强制要求在编码时使用teir unicode转义序列替换unicode字符。 它只定义了编码should be unicode,并允许json字符串中的'任何unicode字符',因此JSON.stringify的结果如果将给定的字符编码为utf-8则没有错误。 /> 任何一个都应该没问题,所以你应该在服务器端看到的应该是b'"\xe6\x99\xae\xe6\xb4\xbe"'