Servlet request.getParameters非英文字符帮助!

时间:2009-09-14 14:47:47

标签: java unicode utf-8 servlets

我迫切需要帮助。

我有一个Java servlet,它由HTTP Get URL访问,其中包含八个参数。 问题是参数不是英语专有的。 任何其他语言都可以在这些参数中,例如希伯来语。

现在,当我发送数据时 - 无论是来自应该发送Get请求的类还是仅来自浏览器的地址栏,我在调试中看到的查询(Netbeans)都有乱码字符和参数本身,发布request.getParameter是????问号。

我将如何或在何处解决这个问题?

4 个答案:

答案 0 :(得分:0)

servlet引擎中应该有一个设置来控制用于URL参数的字符编码。为了支持所有语言,UTF-8编码是一个很好的选择 - 但这不是许多服务器的默认编码。

Tomcat使用ISO-8859-1作为URL参数的默认字符解码器,而不管包含URL的页面的编码如何。可以使用"URIEncoding" attribute in its Connector配置更改此设置。其他应用程序服务器可能具有类似的设置。

如果服务器期望UTF-8编码参数,发送它们的页面也应该用UTF-8编码。

This article涵盖了使用JSP时常遇到的许多问题。

答案 1 :(得分:0)

我怀疑您的服务器处于UTF-8模式,但您的URL编码为Latin-1。你得到什么样的问号,“?”还是“ ”?这将阐明谁在进行转换。

您需要通过添加URIEncoding =“ISO-8859-1”属性将连接器更改为Latin-1,或者您可以使用UTF-8重新编码URL。

如果URL是由浏览器编码的,那么您就会被清除。没有解决方案,因为它可以采用任何一种方式,具体取决于浏览器。看到我的问题,

Handling Character Encoding in URI on Tomcat

答案 2 :(得分:0)

在您的servlet中,在request.getParameter("parameter-name")之前,将请求的字符编码设置为"UTF-8",如下所示:

request.setCharacterEncoding("UTF-8");
String word = request.getParameter("parameter-name");

有关详情,请参见此Tomcat FAQ about Character Encoding issues

答案 3 :(得分:0)

您应该在tomcat的server.xml中添加连接器设置,因为这在tomcat级别上是个问题。

请在连接器标签中添加以下内容

URIEncoding="UTF-8" useBodyEncodingForURI="true"

如果请求是从浏览器提交的,那么您可能还必须在web.xml中进行一些更改。在web.xml中添加此过滤器标签

<filter> <filter-name>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

希望这会有所帮助。