【问题标题】:Grails, Tomcat 7, REST Client and UTF-8 Encoding of CharactersGrails、Tomcat 7、REST 客户端和字符的 UTF-8 编码
【发布时间】:2013-04-10 07:16:30
【问题描述】:

我正在尝试将以下字符串“`.4.13 - 30613 £ ₤ © ™”发布到部署为 WAR 的 Grails 服务器,但在 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

本地环境使用如下结构(Run App)

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]"}

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

在任何虚拟主机之前的 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 字符

任何帮助将不胜感激

【问题讨论】:

    标签: grails utf-8 character-encoding tomcat7 grails-2.0


    【解决方案1】:

    我可以建议一些配置尝试....如果有任何可以解决您的问题,请告诉我:)

    你是在 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">
    

    【讨论】:

    • 连接器已经完成,但它目前在 lcase 中,这会有所不同吗?我还向数据源添加了 UTF-8 编码,但无济于事。此外,编码设置也已经设置好了。
    • 尝试在控制台上执行命令 > locale 。检查所有结果是否为 UTF8 且未报告警告
    • 所有环境都运行windows,有没有等价的命令?
    • ops... 我没有使用 Windows 的经验。对不起:(
    • 看起来对
    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 2011-04-11
    • 2011-06-17
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多