1

我有一个中文字符串“普派”,我想使用 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())。你能帮我解决这个问题吗?非常感谢。

4

1 回答 1

2

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

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

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

于 2013-10-13T10:05:59.030 回答