次の文字列「`.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 文字をまったく表示していないように見えることです。
どんな援助でも大歓迎です