Java - 在tomcat中修改成utf-8編碼

最近遇到系統需升級到struts 6.7.0,

升級後在eclipse運作正常, 但在tomcat 9.0.95卻出現亂碼,

於是在系統中使用 Java 確認編碼:

System.out.println("Default Charset: " + java.nio.charset.Charset.defaultCharset());

System.out.println("file.encoding: " + System.getProperty("file.encoding"));


結果顯示:

在eclipse中印出:

Default Charset: UTF-8

file.encoding: UTF-8


在tomcat中印出:

Default Charset: x-windows-950

file.encoding: MS950


希望能在tomcat也顯示如下結果:

Default Charset: UTF-8

file.encoding: UTF-8


解決方案: 問chatGPT如何修改tomcat 9.0.95目前編碼, 得到解法如下:

要將 Tomcat 的默認編碼從 x-windows-950 和 MS950 修改為 UTF-8,需要進行以下配置。這涉及到 JVM 的字符集設置、Tomcat 的配置文件調整,以及應用程序級別的字符集處理。


步驟 1:修改 JVM 默認編碼 -- Tomcat 的 JVM 默認編碼會影響整個服務的字符處理,因此需要修改 JVM 的 file.encoding 設置。

定位到 Tomcat 的 CATALINA_BASE/bin 目錄:

如果您沒有設置 CATALINA_BASE,則默認是 CATALINA_HOME。

找到 Tomcat 安裝目錄/bin 目錄。

創建 setenv.bat 文件:

如果文件已存在,直接打開編輯;如果不存在,創建一個新文件,命名為 setenv.bat。

在 setenv.bat 中添加自定義的 JVM 編碼設置:

增加: set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8  (之後重啟 Tomcat)


步驟 2:修改 Tomcat 的 URI 編碼 -- 修改 Tomcat 的 URI 編碼以確保 URL 中的字符也使用 UTF-8。

1. 編輯 conf/server.xml 文件。

2. 找到 <Connector> 配置。例如:

添加或修改 URIEncoding 屬性為 UTF-8:

<Connector port="8080" protocol="HTTP/1.1"

   connectionTimeout="20000"

   redirectPort="8443"

   URIEncoding="UTF-8" /> (之後重啟 Tomcat)


步驟 3:確認 Web 應用的字符集設置 -- 確保 Web 應用本身的字符處理邏輯也使用 UTF-8。

a. JSP 文件設置

在每個 JSP 文件的頂部添加以下指令: <%@ page contentType="text/html; charset=UTF-8" %>


b. Servlet 程序設置

在 Servlet 的代碼中顯式設置請求和響應的字符集:

response.setContentType("text/html;charset=UTF-8");

request.setCharacterEncoding("UTF-8");


c. Web.xml 配置

可以在 WEB-INF/web.xml 文件中統一配置編碼過濾器:

<filter>

<filter-name>CharacterEncodingFilter</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>

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



確認上述都修改後, tomcat已經修改成utf-8編碼並運作正常了。


留言

熱門文章