Grails、Tomcat7、REST客户端和字符的UTF-8编码

Grails、Tomcat7、REST客户端和字符的UTF-8编码,grails,utf-8,character-encoding,tomcat7,grails-2.0,Grails,Utf 8,Character Encoding,Tomcat7,Grails 2.0,我正在尝试发布以下字符串“`.4.13-30613₤”)™" 曾经作为WAR部署的Grails服务器,在两个Tomcat7实例之间通信时,我没有运气 我们的服务器作为API工作,web层完全独立。数据通过向web应用发送POST请求保存到DB,然后web应用向服务器发送POST(或PUT for updates)请求以保存数据 当我使用“Run App”启动Web应用程序和服务器时,这可以在本地正常工作,但当我们使用Tomcat7和部署的WAR文件移动到非本地环境时,情况就不一样了 起初我认为这

我正在尝试发布以下字符串“`.4.13-30613₤”)™" 曾经作为WAR部署的Grails服务器,在两个Tomcat7实例之间通信时,我没有运气

我们的服务器作为API工作,web层完全独立。数据通过向web应用发送POST请求保存到DB,然后web应用向服务器发送POST(或PUT for updates)请求以保存数据

当我使用“Run App”启动Web应用程序和服务器时,这可以在本地正常工作,但当我们使用Tomcat7和部署的WAR文件移动到非本地环境时,情况就不一样了

起初我认为这可能与报告的错误有关,但仔细检查后,似乎UTF-8是默认的,并且目前正在使用

非本地环境使用以下结构(部署在Tomcat7中)

这直接来自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]"}
我已经阅读了其他几个地方的一些答案,并做了以下工作

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

AddDefaultCharset utf-8
在两个Tomcat实例中(Web.xml)


setCharacterEncodingFilter
org.apache.catalina.filters.SetCharacterEncodingFilter
编码
UTF-8
真的
此外,根据其他答案,我已经确保我们使用的是WebXML1.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
(和重新启动)

是否使用db连接?检查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">


连接器已经完成,但它当前在lcase中,这会有什么不同吗?我还向数据源添加了UTF-8编码,但没有效果。此外,编码设置也已经设置。请尝试使用命令>区域设置来执行。检查所有结果是否都在UTF8中,并且没有报告任何警告所有environments正在运行windows,您有任何等效命令吗?ops…我没有windows方面的经验。抱歉:(看起来是对
sudo locale-gen
url = "jdbc:mysql://localhost/?useUnicode=true&characterEncoding=UTF-8"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
<Connector ... URIEncoding="UTF-8">