通过AJAX发布JSON时,我遇到了不好的时光。
出于测试目的,下面的代码重现了该问题,并在Firefox Scratchpad中创建(我在应用程序层中使用Backbone):
var xhr = new XMLHttpRequest();
xhr.open("POST", "/my/api/url"); // could be PUT too
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ test: "é" }));
实际上,无论我在JSON中使用什么重音字符串,它总是发送不正确(我已经在Firefox和Chrome中测试过,两个版本都有) - 我可以在Chrome DevTools / Firebug中看到错误的请求数据。在这种情况下发送的是é
。
我在Java中找到了一种解决方法。我不打算一次或两次使用它,但是,似乎情况并非如此。还有很多事情要做 解决方法如下:
test = new String(test.getBytes("ISO-8859-1"), "UTF-8");
任何进一步的帮助将不胜感激。
我的设置(如果有人需要):
我会经常在有问题的数据出现时更新这个问题。
答案 0 :(得分:0)
你没有正确传递json
xhr.send(JSON.stringify({ test: "é" }));
也应该有像{ "test": "e" }
你可以使用变量
var jsonStr={ "test": "é" };
xhr.send(JSON.stringify(jsonStr));
我认为你不需要将json字符串化,因为你已经将Content-Type设置为json,但不确定。
希望它能帮到你......
尝试以这种方式发送参数
var params='json='+jsonStr;
xhr.send(params);
答案 1 :(得分:0)
我已经解决了自己的问题。当我使用RESTEasy时,我的一个方法是使用拦截器MessageBodyReader
。在这堂课中,我在不使用请求编码的情况下阅读正文...
当时:
String body = new String(IOUtils.toByteArray(inputStream));
成为:
String body = new String(IOUtils.toByteArray(inputStream), request.getCharacterEncoding());