2012-03-27 228 views
2

這可能是一個明顯的問題。但是我之前沒有遇到過這種情況。 在我的Spring MVC應用程序中,我在web.xml中有以下配置。如何檢查我的請求 - 響應是否被編碼?

<filter> 
    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 


<filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

瀏覽器和服務器之間的數據傳輸通過使用Jackson Mapper的JSON發生。 請求 - 在Firebug響應頭低於:

Response headers 
Content-Type application/json;charset=UTF-8 
Server   Apache 
Transfer-Encoding chunked 

Request Headers 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Cache-Control no-cache 
Connection keep-alive 
Content-Length 0 
Content-Type application/json; charset=utf-8 

這是否意味着請求 - 響應是正確編碼? 正在看標題唯一的方式來確定使用的編碼?

UPDATE

如果作爲Polve以下提到,該設置隻影響解釋爲UTF-8,那麼我應該怎麼做我的編碼Spring MVC中的反應呢?

回答

2

的CharacterEncodingFilter僅設置要將對方解釋響應(或請求)作爲編碼。

請求不說,您通過Accept-Charset想UTF-8,所以客戶端可以發送任何他想要的,和你的過濾器說,你會解釋它爲UTF-8,即使客戶端指定其他編碼(forceEncoding =真)。

所以,不,這並不意味着你的要求是正確編碼,它說,你應該解釋什麼來爲UTF-8。

+0

確定可以請你告訴我如何確保它被正確編碼? – Raghav 2012-03-27 15:31:15

+0

你不能:-)如果你用英語跟我說話,這是我的習慣用英語回答,但沒有什麼可以阻止我從挪威的回答。但是基本上你應該像前面描述的那樣設置content-type,以及Accept-Charset(並且實際上用該編碼對頁面進行編碼),並且大多數客戶端應該有禮貌地行事。這也是一個很好的閱讀主題:http://www.w3.org/International/questions/qa-forms-utf-8.en.php – polve 2012-03-28 11:06:08

+1

該過濾器的最終目的是總是告訴客戶你使用utf-8,並始終將響應解釋爲utf-8。如果你使用utf-8作爲默認設置你的服務器,並且你的所有響應都使用utf-8編碼,那麼你很安全。例如。如果你從String.getBytes()提取字節數組,你會得到默認的chareset。使用String.getBytes(「UTF-8」)進行轉換。 – polve 2012-03-28 11:18:30

0

在我的具體情況,我想知道是否我將如何編碼我在使用傑克遜用於映射到JSON的Spring MVC應用程序的響應。原來傑克遜的默認編碼是UTF-8。

對於那些誰想要了解更多的關於編碼的,將建議上述polve的回答。

相關問題