6

我拥有 UTF-8 格式的所有内容。这包括 Content-Type、数据库、文件、java,一切(除非我错过了什么)。

我关注了很多 stackoverflow 的答案、JIRA、博客等,但它仍然失败。

问题本身如下:

当我提交时,让我们假设,http://localhost:8080/app/searh?text=café调试,我request.getParameter("text")的总是错误的,类似于café,并request.getCharachterEncoding()给我null(?)。

查看请求标头,我得到了这个:

GET http://localhost:8080/app/search?text=caf%C3%A9 HTTP/1.1
Host: localhost:8080
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17
Referer: http://localhost:8080/app/search?text=n%C3%A3o
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: UTF-8,*;q=0.5
Cookie: JSESSIONID=OMMITED

和响应头:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Wed, 31 Dec 1969 21:00:00 BRT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Tue, 19 Mar 2013 14:06:24 GMT
Proxy-Connection: keep-alive
Connection: keep-alive

一切都是 UTF-8。我只是不明白。

我试图传入-Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8我的standalone.conf JAVA_OPTS变量,试图把

<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>

在我的standalone.xml. 这些都不能解决问题。

我能做些什么来解决这个问题?

提前致谢。

顺便说一句:是 JBoss AS 7.1.1。

4

4 回答 4

3

我遇到了同样的问题,但在 Jboss 5.1 中,我解决了它,将 URIEncoding 属性添加到 HTTP 连接器(在 jbossweb/server.xml 中)并手动解码 URL/GET 参数。

但是在 Jboss7 中定义它的方式与以前的版本不同,但谷歌搜索了一下我发现了这个链接:基​​本上你必须在</extensions>标签末尾之后的 Standalone.xml 或 domain.xml 文件中添加以下行(它看起来你已经完成了这一步;-):

<system-properties>
     <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
     <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

此外,您必须在 java.net.URIEncoder 对象的帮助下手动解码 URI 或参数:

String param = URLDecoder.decode(request.getParameter("text"), "UTF-8");

BalusC在他的博客中有一篇关于它的有趣帖子。

最后,第二种解决方案,如果您想避免使用前面的选项:您是否考虑过使用 POST 方法而不是 GET 方法?

我希望它有所帮助。

于 2013-03-19T15:36:13.683 回答
2

我解决了创建将请求和响应编码都设置为 UTF-8 的过滤器的问题。

相当hacky,但有效。

于 2013-03-19T18:58:46.727 回答
1

我没有足够的声誉来为Toni S. Magraner 的答案添加评论,所以我会在这里写。

request.getParameter("text")已经进行了 URL 解码。再次调用URLDecoder.decode()将提供双重解码,这可能不会满足您的要求。一个例子:

logger.error("p1:"+request.getParameter("p1"));

调用它

http://localhost/test?p1=ku%2fki%44__%33X%C3%A9X

印刷:

p1:ku/kiD__3XéX
于 2013-08-20T12:09:44.200 回答
0

Standalone.xml 或 domain.xml 配置对我不起作用。

在 jboss-as-7.1.1.Final 上,只需将这一行添加到standalone.conf,该文件位于 bin 目录下:

JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.connector.URI_ENCODING=UTF-8"

来自:JBOSS 7 编码未按预期工作

于 2017-01-04T14:32:05.677 回答