2013-04-10 11 views
4

我想交下列字符串「`.4.13 - 30613£₤©™」的UTF-8編碼一個Grails服務器一旦部署爲WAR,我沒有Tomcat7Grails的,Tomcat的7,REST客戶端和人物

我們的服務器可以作爲一個API的兩個實例,和網絡層之間的通信完全seperately時運氣。通過對Web App的POST請求將數據保存到數據庫,然後Web App向服務器發送POST(或PUT for updates)請求以保存數據。

本地當我啓動Web應用程序和服務器使用「運行應用程序」,而不是當我們移動到非本地enviroments與Tomcat7和部署WAR文件,這工作得很好。

Initally我認爲這可能與報告的錯誤http://jira.grails.org/browse/GRAILS-8873但仔細檢查後,似乎UTF-8是默認的,無論如何,和目前正在使用

非本地enviroments用以下結構(在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 £ ? © ™] 

這是直接從日誌從網絡發出的請求的應用程序到服務器 忽略內容長度錯誤的事實,我爲了可讀性而截斷了主體。

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

我已經在其他幾個地方讀了幾答案和之前的任何虛擬主機

AddDefaultCharset utf-8 

在兩個Tomcat實例(web.xml)中

做了以下

在Apache 2.2的httpd.conf文件

<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> 

此外,根據其他答案,我ahve確保我們使用webxml 1.4.1

然而,當值達到服務器端,值都???

我發現了什麼特別奇怪的是即將離任的JSON不會出現在所有

任何援助將不勝感激

回答

2

我可以推薦一些CONFIGS儘量展示UTF-8字符....讓我知道如果任何能夠解決您的問題:)

你在Ubuntu或其他Linux呢?嘗試設置

LANG="en_US.UTF-8" 
LANGUAGE="en_US:en" 
LC_ALL="en_US.UTF-8" 
在/ etc /默認/區域設置

和運行

sudo locale-gen 

您使用的數據庫連接(和重新啓動)?檢查是否在配置/ 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"> 
+0

連接器已經完成,但它現在在lcase,這會有所作爲嗎?我也將UTF-8編碼添加到數據源中無濟於事。此外,編碼設置也已設置。 – 2013-04-11 02:06:32

+0

嘗試執行命令>語言環境。檢查所有結果是否都是UTF8並且沒有警告報告 – 2013-04-11 07:10:06

+0

所有環境都在運行窗口,您是否有任何equivilent命令? – 2013-04-11 23:58:25