JQuery ajax char编码问题到Java servlet

时间:2011-02-22 15:59:33

标签: jquery jsp servlets character-encoding

我将这个绑定到我的textfields onkeyup事件:

function ajaxSearch(sstring,miszerint,startrow,Valid,notValid) {
setTimeout(function query(){
  if (sstring.length <= 3)
  {
      $("#external").html("<p>min 3 chars please.</p>")
  }
  else
  {
    $('#loading').ajaxStart(function() {
      $(this).show()
      $("#external").hide()
    });

    $('#loading').ajaxComplete(function() {
      $(this).hide()
      $("#external").show()
    });

    $.ajax({
        type:"GET",
        url: "/myApp/getStd",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType:"application/x-www-form-urlencoded; charset=UTF-8",
        data:"sstring="+escape(sstring)+"&options="+miszerint+"&startrow="+startrow+"&valid="+Valid+"&notValid="+notValid+"&searchForm=1",

                async: true,
        success: function(data){
        $("#external").html(data);

        }
     })
   }
},1500)
}

问题在于,当我把匈牙利语字符(例如,æőűúíéá“)放入文本字​​段时,我的servlet返回” “而不是提供的字符。

如果我在没有ajax的情况下直接查询servlet,它可以正常工作。 在我定义的JSP中:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

在servlet上,我将响应字符集设置为“UTF-8”。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

对于URL编码查询参数,您应该使用encodeURIComponent()而不是escape()。或者,更好的是,将它作为JS对象提供,然后jQuery将担心URL编码。

data: {
    "sstring": sstring,
    "options": miszerint,
    "startrow": startrow,
    "valid": Valid,
    "notValid": notValid,
    "searchForm": 1
}

答案 1 :(得分:0)

在servlet中创建输出流时使用UTF8字符集。 像这样:

resp.setCharacterEncoding("UTF-8");
OutputStream os = resp.getOutputStream();
BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(os,"UTF8"));