我迫切需要帮助。
我有一个Java servlet,它由HTTP Get URL访问,其中包含八个参数。 问题是参数不是英语专有的。 任何其他语言都可以在这些参数中,例如希伯来语。
现在,当我发送数据时 - 无论是来自应该发送Get请求的类还是仅来自浏览器的地址栏,我在调试中看到的查询(Netbeans)都有乱码字符和参数本身,发布request.getParameter是????问号。
我将如何或在何处解决这个问题?
答案 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是由浏览器编码的,那么您就会被清除。没有解决方案,因为它可以采用任何一种方式,具体取决于浏览器。看到我的问题,
答案 2 :(得分:0)
在您的servlet中,在request.getParameter("parameter-name")
之前,将请求的字符编码设置为"UTF-8"
,如下所示:
request.setCharacterEncoding("UTF-8");
String word = request.getParameter("parameter-name");
答案 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>
希望这会有所帮助。