使用 jquery 将 UTF-8 字符串发布到 servlet

Post a UTF-8 string to a servlet using jquery

本文关键字:servlet 字符串 jquery UTF-8 使用      更新时间:2023-09-26

我正在尝试将 UTF-8 字符串POSt到我的servlet(托管在TomCat中(,但是在服务器端读取的字符串不是UTF-8。 我已经通过Firebug验证了ajax标头的内容类型是否设置了utf-8编码。我正在向服务器发布"墨西哥",但我收到"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%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'
                        );

或者我什么都不懂(如果是这种情况,对不起:/(

尝试使用 encodeURIComponent(( 对数据值进行编码

data: encodeURIComponent('MÉXICO')

来源:JQuery AJAX 没有向我的服务器发送 UTF-8,只在 IE 中

发送