2014-03-31 33 views
0

我有一個Tomcat 7 web應用程序,並且遇到字符集問題。我的目標是將所有內容強制轉換爲UTF-8,並完成它。我真的很驚訝,在2014年不是所有的東西都默認爲UTF-8 ...Tomcat 7 org.apache.catalina.filters.AddDefaultCharsetFilter不使用UTF-8

我閱讀了文檔,並取消了系統默認web.xml中的org.apache.catalina.filters.AddDefaultCharsetFilter過濾器。

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

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

我還添加URIEncoding="UTF-8"在server.xml中的連接器:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> 

這樣做(和一堆其他的東西像jdbc params)似乎將請求轉換爲UTF-8。但是,我如何強制響應UTF-8?

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    System.out.printf("Req: %s\n", req.getCharacterEncoding()); 
    System.out.printf("Resp: %s\n", resp.getCharacterEncoding()); 

產量:

Req: UTF-8 
Resp: ISO-8859-1 

感謝

+0

客戶是否發送了'內容Type'用' charset參數? Tomcat不會覆蓋客戶端的設置。 –

+0

客戶端含義瀏覽器?這不是請求的一部分嗎?這是不起作用的迴應。此外,應用程序中的每個頁面都以'<%@ page language =「java」contentType =「text/html; charset = UTF-8」pageEncoding =「UTF-8」%>開頭。和doGet的行爲相同。 – PrecisionPete

+0

在web.xml中啓用過濾器確實解決了我的字符失真問題。我覺得奇怪的是它沒有出現UTF-8 ... – PrecisionPete

回答