4

次の文字列「`.4.13 - 30613 £ ₤ © ™」を WAR としてデプロイされた Grails サーバーに投稿しようとしていますが、Tomcat7 の 2 つのインスタンス間で通信するときに運がありません。

私たちのサーバーは 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]"}

他のいくつかの場所でいくつかの回答を読み、次のことを行いました

ANY 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 文字をまったく表示していないように見えることです。

どんな援助でも大歓迎です

4

1 に答える 1

2

試してみるためにいくつかの構成を提案できます....問題を解決できるものがあれば教えてください:)

あなたは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">
于 2013-04-10T16:40:12.797 に答える