我正在尝试将以下字符串“`.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中部署的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 字符
任何帮助将不胜感激