Javascript 具有特殊字符的DOJO xhrGet json
我使用dojo和struts 1.3.8,我想通过dojo.xhrGet将一些“特殊”字符,如è、°、传递给action struts saveBill。但是当我在它给我的动作中打印json时Javascript 具有特殊字符的DOJO xhrGet json,javascript,ajax,utf-8,dojo,struts,Javascript,Ajax,Utf 8,Dojo,Struts,我使用dojo和struts 1.3.8,我想通过dojo.xhrGet将一些“特殊”字符,如è、°、传递给action struts saveBill。但是当我在它给我的动作中打印json时 è la prova n°10 我不知道问题出在哪里,我在所有jsp中都将所有内容类型设置为utf-8。。。我还使用了一个struts过滤器在utf-8中进行编码。。。没有什么我哪里错了? 这是javascript代码 var billJson = {"row":"0","descr":"è la
è la prova n°10
我不知道问题出在哪里,我在所有jsp中都将所有内容类型设置为utf-8。。。我还使用了一个struts过滤器在utf-8中进行编码。。。没有什么我哪里错了?
这是javascript代码
var billJson = {"row":"0","descr":"è la prova n°10"};
dojo.xhrGet({
url: "saveBill.do",
headers: {'bill': billJson, 'Content-Type': 'application/json; charset=UTF-8'},
handleAs: "text",
load: function(response, ioArgs) {
showMessage(response);
},
error: function(message, ioArgs) {
showMessage(message);
}
});
这是响应头(从Firebug复制粘贴)
谢谢 您需要对这些字符进行unicode转义:因此,您将使用\\u00E8而不是è
这里有一个参考资料:在HTTP头中发送JSON是相当不标准的,我不推荐这样做。不在头中发送JSON的一个原因是,正如您所发现的,HTTP头只是字节;它们没有内在的代码页来将它们转换为字符串。我将改为在POST body中发送JSON数据;我想你的运气会好得多 但是,如果您必须在头中发送非ASCII JSON数据,则可以尝试调用ServletRequest.setCharacterEncoding(“UTF-8”)。我认为这只会影响URL参数和帖子正文的解析,但值得一试。正如Robot Woods建议的那样,您还可以将所有非ASCII字符编码为JSON(其中XXXX是字符UTF-16编码的十六进制表示)
但说真的,就把它放在帖子里;这是一个更强大、更好的解决方案。您正在将数据传递到名为“bill”的标题字段中?为什么在传递JSON时使用handleAs=text?“文本”不会进行任何转义,因此您必须对非ASCII字符进行编码。您的服务器正在内容上声明utf-8,但您确定服务器上的内容实际上是以utf-8编码的(以匹配)?
Host localhost:9080
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8
Accept-Language it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
bill {"row":"0","descr":"è la prova n°10"}
Content-Type application/json; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://localhost:9080/CA3_S_001/login.do
Cookie invoiceTreeSaveStateCookie=undefined%2C000001%2C000014; JSESSIONID=0000QeyArD4K7CDr_oyNkrpw9Zk:-1