如何在JBoss 7中正确接收UTF-8字符?

时间:2016-12-01 22:34:02

标签: encoding utf-8 jboss request jboss7.x

我正在使用JBoss 7.1.3。目前,当我向服务器提交具有特殊字符的请求时,例如

Café

它被服务器接收为

Café

我在网上找到的唯一建议就是将这些sysmte属性添加到$ JBOSS_HOME / standalone / configuration / standalone.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>

但是,即使重新启动我的服务器后,我的特殊字符仍然在服务器端未正确接收。我还能做些什么才能正确理解角色?

5 个答案:

答案 0 :(得分:0)

JBOSS版本7.1.0 beta或更高版本 修复编码的事情是将以下行包含在standalone.conf直接在文件夹

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

standalone.conf 直接在bin domain.conf下以适合您的方式尝试以下内容

-Dfile.encoding=UTF-8

*适用于版本 7.1 JBOSS

答案 1 :(得分:0)

e-acute是U + 00E9。 使用UTF-8进行编码,得到0xC3 0xA9。 如果你转换它假设你的终端或其他什么使用cp1252或类似,你得到é。解决方案:不要这样做。告诉你的jboss使用UTF-8。

答案 2 :(得分:0)

您尝试过以下选项吗?

设置启动参数

-Dorg.wildfly.undertow.ALLOW_UNESCAPED_CHARACTERS_IN_URL=true

https://issues.jboss.org/browse/JBEAP-13710

答案 3 :(得分:0)

尝试将org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING设置为false

最近有相同的问题,上述配置正确是 Jboss EAP 6.4.0 上的核心问题。

似乎无论您在URI_ENCODING中进行了什么设置,如果USE_BODY_ENCODING_FOR_QUERY_STRING设置为true(并且正文没有编码),它将默认为 ISO-8859-1

与tomcat文档一样:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html(查找useBodyEncodingForURI连接器属性)。

答案 4 :(得分:0)

在 JBoss 6.4 中也有同样的问题。 JVM 设置正确,显示特殊字符正常,但 POST 请求编码为 ISO-8859-1

有人放了一个过滤器,没有运气设置编码。

request.setCharacterEncoding("UTF-8");

最后的问题是这个过滤器不是第一个被执行的。我做了什么把这个“UTF8过滤器”放在第一位,它解决了这个问题。 诀窍是执行的第一个过滤器设置编码。似乎另一个过滤器确实设置了错误的编码。

该类使用以下代码实现 javax.servlet.Filter

public void doFilter(ServletRequest inRequest, ServletResponse inResponse, FilterChain inFilterChain) throws IOException, ServletException {
    inRequest.setCharacterEncoding("UTF-8");
    inFilterChain.doFilter(inRequest, inResponse);
}