我使用dojo和struts 1.3.8并且我想通过dojo.xhrGet将一些“特殊”字符(如è,°,ù,€)传递给动作struts saveBill。但是当我在动作中打印json时它给了我
è la prova n°10
我不知道问题出在哪里,我在所有jsp中将所有内容类型设置为utf-8 ...我在utf-8中也使用了struts过滤器进行编码...没有...其中我错了? 这是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的复制和粘贴)
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
感谢!!!
答案 0 :(得分:0)
你需要unicode逃避这些角色:所以你没有è,而是\ u00E8
这是一个资源:http://www.fileformat.info/info/unicode/category/Ll/list.htm
答案 1 :(得分:0)
在HTTP标头中发送JSON是相当不标准的,我不推荐它。不在标头中发送JSON的一个原因是,正如您所知,HTTP标头只是字节;他们没有内在的代码页来将它们转换成字符串。我会在POST主体中发送JSON数据;我想你会有更多,更好的运气。
但是,如果您绝对必须在标头中发送非ASCII JSON数据,则可以尝试调用ServletRequest.setCharacterEncoding(“UTF-8”)。我认为它只会影响URL参数和POST主体的解析,但值得一试。您也可以像机器人伍兹建议的那样,\ uXXXX对JSON中的所有非ASCII字符进行编码(其中XXXX是字符的UTF-16编码的十六进制表示)。
但严重的是,只需把它放在POST体内;这是一个更强大,更好的解决方案。