坏编码返回在使用Spring MVC和AJAX的字符串时,(Bad encoding when re

2019-08-17 07:22发布

我有一个网页请求使用Ajax的希伯来文字符串,但该字符串返回为“??????”

奇怪的是,使用JSTL,而不是阿贾克斯插入相同的字符串到页面时,它显示正确...

在我的网页我声明了

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

这是我的控制器:

@RequestMapping("get_label")   
public @ResponseBody String getLabel()
{
   String str = "בדיקה";

   return str;
}

而我的Ajax请求:

$.ajax({
    url:    "get_label",
    success:    function(result)
    {
        alert(result);
        $("#parameter_select label").text(result);
    }
});

任何想法我究竟做错了什么?

Answer 1:

这发生在默认情况下使用浏览器的默认编码(FE ANSI),因为AJAX通话。 对于重写此你需要做的:

jQuery的风格 - mime类型

$.ajax({
    url:    "get_label",
    mimeType:"text/html; charset=UTF-8",
    success:    function(result)
    {
        alert(result);
        $("#parameter_select label").text(result);
    }
});

香草JS 风格 :

xhr.overrideMimeType("text/html; charset=UTF-8")

但是,从你需要确保另一方面,该服务器还返回适当的响应。 为此,您需要检查以下内容:

  1. 添加Web容器(如Tomcat)的UTF-8支持与添加的URIEncoding = “UTF-8”server.xml中连接器设置; 检查此了解更多信息。
  2. 如果之前的变化没有帮助(虽然它有),还请确保,即servlet响应的字符集也是UTF-8。

为此,您可以使用方法的任何显式调用:

@RequestMapping("get_label")
public @ResponseBody String getLabel(HttpServletResponse response)
{
    String str = "בדיקה";

    //set encoding explicitly
    response.setCharacterEncoding("UTF-8");

    return str;
}

或者,这似乎是更多的最好@ResponseBody和Spring 3.1+:

@RequestMapping(value = "get_label", produces = "text/html; charset=UTF-8")
public @ResponseBody String getLabel(HttpServletResponse response)
{
    String str = "בדיקה";

    return str;
}

作为结论,我想澄清一下,对于用UTF-8编码的AJAX调用正确的处理,你必须确保,即:

  • Web容器正确支持此
  • 响应的字符编码是UTF-8
  • AJAX请求的字符编码也是UTF-8


文章来源: Bad encoding when returning a string using Spring MVC & ajax