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