使用springmvc的编码问题
我有一个创建用户的演示web应用程序。当我尝试用其他语言(如法语)插入数据时,字符编码不正确。控制器上的代码为:使用springmvc的编码问题,spring,spring-mvc,Spring,Spring Mvc,我有一个创建用户的演示web应用程序。当我尝试用其他语言(如法语)插入数据时,字符编码不正确。控制器上的代码为: @SuppressWarnings("unchecked") @RequestMapping(value = "/user/create.htm", params={"id"}, method = RequestMethod.GET) public String edit(@RequestParam("id") Long id, ModelMap model) {
@SuppressWarnings("unchecked")
@RequestMapping(value = "/user/create.htm", params={"id"}, method = RequestMethod.GET)
public String edit(@RequestParam("id") Long id, ModelMap model) {
System.out.println("id is " + id);
User user = userService.get(id);
model.put("user", user);
return "user/create";
}
@RequestMapping(value = "/user/create.htm", method = RequestMethod.POST)
public String save(@ModelAttribute("user") User user, BindingResult result) {
System.out.println(user.getFirstName());
System.out.println(user.getLastName());
validator.validate(user, result);
if(result.hasErrors()) {
return "user/create";
}
userService.save(user);
return "redirect:list.htm";
}
我的web.xml是:
...
<filter>
<filter-name>encoding-filter</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>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
。。。
编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码过滤器
/*
...
网页为:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
<form:form method="post" commandName="user">
...
<form:input path="firstName" cssErrorClass="form-error-field"/>
...
...
...
...
当我在名字中输入一些法语字符时,system.out.println
的输出是??+??
或类似的东西
我看到其他人用CharacterEncodingFilter
解决了这个问题,但这似乎不起作用
非常感谢
编辑了筛选值。也许我遗漏了什么,但是如果JSP中的页面编码是“UTF-8”,那么CharacterEncodingFilter中的编码不应该是UTF-8而不是ISO-8859-7吗?System.out.println()的输出取决于控制台编码,因此这不是调试编码问题的好方法
要检查您的值是否被正确解码,您应该在另一页显示它。实际上,在表单验证失败的情况下,它已经完成了,因此,如果在验证错误后字段中的值保持不变,则系统可以正常工作。如果这仍然不起作用,并且您使用Tomcat作为应用程序服务器,请尝试在
server.xml
中的每个
元素上设置以下选项:
<Connector URIEncoding="UTF-8" ...>
...
</Connector>
...
这对我起了作用。其他应用程序服务器可能有类似的选项,因此您可能需要查看服务器文档。尝试将CharacterEncodingFilter作为web.xml中的第一个过滤器
我知道这个问题有点老了,但我遇到了同样的问题,移动CharacterEncodingFilter为我解决了这个问题。您需要将accept charset=“UTF-8”添加到表单中。有两件事需要帮助:
setenv.sh
文件中添加JAVA\u OPTS=“$JAVA\u OPTS-Dfile.encoding=utf-8”
export LANG='utf-8'
然后可以通过检查默认字符集来测试这一点:
Charset.defaultCharset()
是的,你是对的,我正在测试各种内容,但忘了再次编辑它。问题是相同的想法这为我解决了相同的问题