2016年3月6日 星期日

[Tomcat] Servlet Java 中文亂碼 UTF-8 vs BIG-5

這邊要分享的是 Tomcat Servlet Java 中文亂碼 UTF-8 BIG-5



GET



要怎麼解決呢?
這個問題剛碰到真的好棘手!!




參考
http://roymercadian.blogspot.tw/2012/12/tomcatutf-8.html

就是把Tomcat 的 filter 改一下 就可以

在 server.xml 下修改   
 <Connector connectionTimeout= "20000" port ="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding= "BIG5"/>

他預設是   ISO-8859-1  這邊主要設定傳入參數 encoding 讀取啦 

設定完後, http://localhost:8080/myServlet/Lib01?name=中文 

理論上 System.out.println();  會出現 正確的編碼!!  

這只是讀取!!!! 

要顯示 正確的中文 就要 在serverlet 加入
               response.setContentType( "text/html; charset=BIG5");// 注意順序

               PrintWriter out = response.getWriter();  // 注意順序
                out.println( "<h1> user information 文</h1><br>" );
               out.println( "<h1> "+name +"</h1><br>" );
               System. out.println("name=" +name );

就可以正確顯示中文啦!!!

別開心得太早!! 這只是 GET 的方法!!  還有 POST !!

-------------------------------------------------------

POST 

2. POST請求部份
Tomcat提供了一個名為SetCharacterEncodingFilter.class的filter,可以將POST請求改為UTF-8編碼

Tomcat 7.x以及5.5.36、6.0.36之後的版本:
在Tomcat 7.x以及5.5.36、6.0.36之後的版本中,已經將SetCharacterEncodingFilter加入Tomcat核心中,因此不需要再自行複製class到自己的webapp資料夾中,在設定filter時直接指定class  (WEB-INF /web.xml)即可。
<filter>
<filter-name>Set Character Encoding</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>
</filter>

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<!--將全部的請求都mapping給filter-->
<url-pattern>/*</url-pattern>
</filter-mapping>

---------------------------------------------------------------------------------------

當我所有的設定都設成UTF-8的時候
偏偏console怎麼搞都是亂碼

後來才發現當java檔編碼設為BIG5時就正常了…
這不是我要的!

再後來發現這篇
Eclipse 執行時如何讓Console顯示中文
Eclipse主功能表-->Run-->Run Configuration-->Common 頁籤-->
Console Encoding-->Others-->big5 (沒有就手動輸入)-->Apply

最後是印出正常的中文,但是這代表JDK應該是自己把它變成BIG5
所以導至設定成UTF-8的Console會印出亂碼!

建置全UTF-8的環境:
1.在eclipse.ini的-vmargs下面加上「-Dfile.encoding=UTF-8」。
2.eclipse-->Window-->Preferences-->General-->Workspace-->Text file encoding-->UTF-8
3.Installed JREs-->Default VM Arguments:-->-Dfile.encoding=UTF-8
4.eclipse-->Run-->Run Configurations-->Arguments-->VM arguments-->-Dfile.encoding=UTF-8
5.eclipse-->Run-->Run Configuration-->Common 頁籤--> Console Encoding-->Others-->UTF-8
==>亂碼!
5.eclipse-->Run-->Run Configuration-->Common 頁籤--> Console Encoding-->Others-->big5
==>ok!

目前發現是 JDK的問題:
a.若是用JDK1.4那console得設定成big5才行!
b.若是用JDK6,那用UTF-8就沒問題!

沒有留言:

張貼留言