2011-06-28 56 views
0

我试图从JSP中使用getParameter获取值,其中包括ü,é,à等。但是在servlet中获取错误的值。我检查的内容类型与萤火虫,发现req.getParameter返回错误的字符编码

Content-Type text/html;charset=UTF-8 

检查与萤火虫支柱部,找到了正确的价值在那里,当我试图访问它的servlet是错误的。给ö而不是ö

req.getCharacterEncoding(); 

返回null。

试图与在Servlet的开始设置

req.setCharacterEncoding("UTF-8"); 

,但没有帮助。

编辑:

req.getParameter("myValue").getBytes("8859_1"), "utf-8") 

上面一行给出正确的值。

+0

可以扩大'在Servlet的开始,但没有help.' –

+0

添加该行servlet代码。 – coder247

回答

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> 
+0

这基本上只有'req.setCharacterEncoding(“UTF-8”);'。但是你自己说过它没有用。也许你没有运行你认为正在运行的代码,或者它实际上不在servlet的开头。 – BalusC

+0

好的。这一变化解决了字符转换的问题。在为每个getParameter手动完成之前。 – coder247

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的默认编码,这就是解码这些值时存在很多混淆的原因。

页确实提到2级可能的方式在一个Tomcat的servlet运行运行时影响这种行为:

  • 坐落在server.xml中元素的属性的URIEncoding在确定的(如的URIEncoding =“UTF-东西8" )。
  • 将server.xml中元素的useBodyEncodingForURI属性设置为true。这将导致连接器为GET参数使用请求主体的编码。