我有一個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
感謝
客戶是否發送了'內容Type'用' charset參數? Tomcat不會覆蓋客戶端的設置。 –
客戶端含義瀏覽器?這不是請求的一部分嗎?這是不起作用的迴應。此外,應用程序中的每個頁面都以'<%@ page language =「java」contentType =「text/html; charset = UTF-8」pageEncoding =「UTF-8」%>開頭。和doGet的行爲相同。 – PrecisionPete
在web.xml中啓用過濾器確實解決了我的字符失真問題。我覺得奇怪的是它沒有出現UTF-8 ... – PrecisionPete