java - 使用 Spring MVC 和 ajax 返回字符串时编码错误

标签 java ajax spring-mvc encoding

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

奇怪的是,当使用 JSTL 而不是 Ajax 将相同的字符串插入页面时,它显示正确...

在我的网页上声明

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

那是我的 Controller :

@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);
    }
});

知道我在这里做错了什么吗?

最佳答案

发生这种情况是因为默认情况下 AJAX 调用使用浏览器的默认编码(例如 ANSI)。要覆盖它,您需要执行以下操作:

jQuery style - mimeType:

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

Vanilla JS style :

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

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

  1. 通过为 server.xml 中的Connector 设置添加 URIEncoding="UTF-8" 为网络容器(即 Tomcat)添加 UTF-8 支持;检查this了解更多信息。
  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-container 正确支持这一点
  • response的字符编码为UTF-8
  • AJAX请求字符编码也是UTF-8

关于java - 使用 Spring MVC 和 ajax 返回字符串时编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15205066/

相关文章:

rest - Swagger和HATEOAS之间的区别

java - 为什么允许通过引用类的实例来调用静态方法?

java - 找不到库 "libmaliinstr.so".... 在 Eclipse 中

java - MainActivity 上的 android.view.InflateException 错误

javascript - 带有 AJAX 内容的 Sweet Alert 2

javascript - 如何在 anchor 标签中调用 AJAX 函数

java - GWT DatePicker 在 2.5.1 中的变化

javascript - js $.post 问题

java - Spring MVC 无效日期格式错误消息未显示

java - Validator 的目标无效 - Spring MVC