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

标签 java javascript jquery

我正在尝试将 UTF-8 字符串发布到我的 servlet(托管在 TomCat 中),但在服务器端读取的字符串不是 UTF-8。我已经通过 Firebug 验证了 ajax header 的内容类型具有 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/

相关文章:

javascript - 从下拉菜单中的数组中取回特定项目

java - 高效的树排序

Java极小数算术运算

java - Websphere 8.5 java.lang.NumberFormatException : WSWS3435E: Error: Invalid date/time. 收到日期/时间值的空字符串

javascript - 如何使用 javascript 或 html 下载 PDF 格式的填写表格

javascript - 在 JavaScript 中合并两个键=值对字符串

java - com.fasterxml.jackson.core.Version 的用途

jquery - jQuery 选项卡中的 FullCalendar 最初不会通过 ajax 加载

jQuery UI Tabs 或 .load() - 选项卡链接与选项卡内容和附加 URL 位于不同的容器中

javascript - 模态打印输出的变化