【发布时间】:2012-03-25 09:18:35
【问题描述】:
我正在尝试将 UTF-8 字符串发布到我的 servlet(托管在 TomCat 中),但在服务器端读取的字符串不是 UTF-8。我已经通过 firebug 验证了 ajax 标头的内容类型具有 utf-8 编码集。我将“MÉXICO”发布到服务器,但收到“MÉXICO”。
$.ajaxSetup({
scriptCharset: "utf-8" ,
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
});
$.ajax({
url: "SetData",
type: 'POST',
data: 'MÉXICO',
success: function(){
console.log('Data set');
}
});
这是servlet中的java代码
request.setCharacterEncoding("UTF-8");
BufferedReader reader = new BufferedReader( new InputStreamReader( request, "UTF-8" ) );
char[] chr = new char[5];
reader.read( chr );
builder.append( chr );
更新 1
我将 js 中的发布数据更改为 encodeURIComponent('MÉXICO') 但服务器仍然读取“MÉXICO”。
但是,如果我得到 encodeURIComponent('MÉXICO') 的字符串值,即'M%C3%89XICO',它就可以工作! 我被电死了!知道为什么这应该有效吗?
$.ajax({
url: "SetData",
type: 'POST',
//data: 'MÉXICO', ** does not work
//data: encodeURIComponent('MÉXICO'), ** does not work
data: 'M%C3%89XICO', //works !!!!
success: function(){
console.log('Data set');
}
})
;
【问题讨论】:
-
最后,弄清楚为什么当字符串没有被硬编码时没有被唤醒。我没有设置文档的字符编码!谢谢大家!
标签: java javascript jquery