我试图将UTF-8字符串邮寄到我的servlet(托管在TomCat中),但是在服务器端读取的字符串不是UTF-8。我已经通过Firebug验证了ajax标头的content-type具有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');
  }
})


;

最佳答案

我不明白您在做什么以及正在发送哪种请求参数。不应该的代码是这样的:

...
data:{key:'MÉXICO'},
...


要么

...
data:{key:encodeURIComponent('MÉXICO')},
...


并在servlet中

...
request.getParameter('key')
...


要么

 stringURLDecoder.decode(
                             request.getParameter('key').toString(),
                             'UTF-8'
                        );


或我什么都不懂(如果是这种情况,抱歉:/)

关于java - 使用jquery将UTF-8字符串发布到servlet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9608374/

10-11 11:47