UTF-8 编码、JSP、jQuery、Spring 的问题

2024-04-14

我在 apache tomcat 6 中有一个带有 spring、jsp 和 jquery 的 Web 应用程序,一个 jsp 页面有一个表单,该表单通过 jquery 进行的 ajax 调用将数据发送到我后端的 Spring MultiActionController。

问题在于表单输入中的 UTF-8 字符串。

我已经做了以下事情:

在我的 HTML 上:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page language="java" pageEncoding="utf-8"%>

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

在 jquery ajax 调用上:

$.ajaxSetup({ scriptCharset: "utf-8" ,contentType: "application/x-www-form-urlencoded; charset=UTF-8" });
    $.ajax(
        {
            type: "GET",
            url: "./saveData.action",
            contentType: "charset=utf-8",
            data: { name: $('#name').val(),...

在 tomcat server.xml 上:

<Connector connectionTimeout="20000" port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" redirectPort="8443"/>

在多动作控制器上

public ModelAndView saveData(HttpServletRequest request,HttpServletResponse response) 
    throws ServletException, IOException 
    {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");

因此,如果在 name 参数中我输入如下内容:

María

在后端我得到

María.

我已经尝试了我读到的所有内容,但我不知道错误是什么,感谢您的帮助:)


一切看起来都很好,直到您在变量中获取参数为止。只是您的后端仍需要配置为使用 UTF-8。例如,System.out.println()或者您将检索到的参数发送到的记录器也应该使用 UTF-8。或者存储检索到的参数的数据库也应该使用 UTF-8。或者与该数据库交互的 JDBC 驱动程序。或者您要写入数据的文本文件。等等。

也可以看看:

  • Unicode - 如何获得正确的字符? http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html

无关对于你的具体问题,该行

request.setCharacterEncoding("UTF-8");

应该被执行beforeSpring 启动。它设置 POST 请求编码,每当 Spring 在执行操作之前确定请求正文时,这都会失败(请注意,这一行对 GET 请求完全没有影响)。春天有一个CharacterEncodingFilter正是这样做的。将此注册到您的web.xml:

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF-8 编码、JSP、jQuery、Spring 的问题 的相关文章

随机推荐