我正在尝试使用包含ü,é,à等的getParameter从JSP获取值。但是在servlet中获取错误的值。我用firebug检查了内容类型,发现了
Content-Type text/html;charset=UTF-8
用firebug检查POST部分并在那里找到正确的值,当我尝试在servlet中访问它时它是错误的。给ö而不是ö
req.getCharacterEncoding();
返回null。
尝试设置
req.setCharacterEncoding("UTF-8");
在servlet的开头但没有帮助。
编辑:
req.getParameter("myValue").getBytes("8859_1"), "utf-8")
以上行给出了正确的值。
答案 0 :(得分:2)
来自http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
HTTP查询字符串的字符集(这是'GET参数'的技术术语)可以在第2节和第2.1节“URI语法”规范中找到。字符集定义为US-ASCII。任何未映射到US-ASCII的字符都必须以某种方式进行编码。 URI语法规范的2.1节说明US-ASCII之外的字符必须使用%转义序列进行编码:每个字符编码为文字%,后跟两个十六进制代码,表示其字符代码。因此,(US-ASCII字符代码97 = 0x61)等同于%61。在任何地方都没有指定URI的默认编码,这就是解码这些值时存在很多混淆的原因。
在运行Tomcat servlet时,页面确实提到了两种影响此行为的方法:
答案 1 :(得分:1)
将以下内容添加到web.xml修复了问题...
<filter>
<filter-name>charsetFilter</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>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>