Grails,Tomcat 7,REST客户端和UTF-8字符编码

我尝试将以下字符串“.4.13 – 30613£₤©™”发布到Grails服务器上,一旦部署为WAR,我在两个Tomcat7实例之间进行通信时没有运气

我们的服务器作为API工作,而Web层完全独立.通过对Web App的POST请求将数据保存到DB,然后Web App向服务器发送POST(或PUT以进行更新)请求以保存数据.

当我使用“Run-App”启动Web应用程序和服务器时,这在本地工作正常,但是当我们使用Tomcat7和部署的WAR文件移动到非本地环境时.

最初我认为这可能与报告的错误http://jira.grails.org/browse/GRAILS-8873有关但经过仔细检查后,看来UTF-8无论如何都是默认的,目前正在使用中

非本地环境使用以下结构(Tomcat7中的Deployed WAR)

Entry Point -> Apache 2.2 < - > Web App < - > Server

本地环境使用以下结构(运行应用程序)

Entry Point -> Web Abb < - > Server

我已经将编组时的值输出到字符串以确保在将其发送到服务器之前,它具有正确的编码

DEBUG MarshallService  - Marshalling Property : name of value [ `.4.13 - 30613 £ ? © ™]

这直接来自Web应用程序到服务器的传出请求的日志
忽略内容长度错误的事实,我为了可读性而截断了主体.

DEBUG org.apache.http.headers  - >> PUT /baseline-server/baseline/pwqi9tzyTRWX5oZogfKjJw HTTP/1.1
DEBUG org.apache.http.headers  - >> Accept: application/json; charset=utf-8
DEBUG org.apache.http.headers  - >> Content-Length: 349
DEBUG org.apache.http.headers  - >> Content-Type: application/json
DEBUG org.apache.http.headers  - >> Host: localhost:9001
DEBUG org.apache.http.headers  - >> Connection: Keep-Alive
DEBUG org.apache.http.headers  - >> Accept-Encoding: gzip,deflate
DEBUG org.apache.http.wire  - >> "{"name":"`.4.13 - 30613 [0xa3] ? [0xa9] [0x99]"}

我已经阅读了其他几个地方的几个答案,并完成了以下工作

在任何VirtualHost之前的Apache 2.2 HTTPD.conf中

AddDefaultCharset utf-8

在两个Tomcat实例(Web.xml)中

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

另外,根据其他答案,我确保我们使用webxml 1.4.1

然而,当值到达服务器端时,值都是???

我发现特别奇怪的是传出的JSON似乎根本不显示UTF-8字符

任何帮助将不胜感激

最佳答案 我可以建议一些配置尝试….让我知道是否有任何可以解决你的问题:)

你在ubuntu或其他Linux上?尝试设置

LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
LC_ALL="en_US.UTF-8"

在/ etc / default / locale中运行

sudo locale-gen

(并重启)

你在使用数据库连接吗?检查config / dasource.groovy中的连接是否为utf8

url = "jdbc:mysql://localhost/?useUnicode=true&characterEncoding=UTF-8"

将此设置放在/etc/Config.groovy中

grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"

检查您的tomcat连接器是否配置为utf8

<Connector ... URIEncoding="UTF-8">
点赞