DOJO xhrGet json具有特殊性

时间:2011-04-05 09:36:33

标签: javascript ajax utf-8 dojo struts

我使用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

感谢!!!

2 个答案:

答案 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体内;这是一个更强大,更好的解决方案。