看了好幾篇文, 對中文參數傳遞時會變亂碼終於有點頭緒, 所以就來分享一下,

其實用browser大大的方法是最簡單的解決方法, 建議初學者用這個先練習一下.

但就是要一個一個的改, 對於開發網站的不太好做, 所以分享一下我暫時的做法


os: Win2000 server + Tomcat 5.0.28 + JDK 1.4.2_07

*: 因為我都習慣用UTF-8, 所以檔案要是UTF-8格式(web.xml 和 server.xml 不用特意去改, 原本是怎樣就直接修改即可)

站台叫\mytest


參數傳遞可分為POST 和 GET


[POST]

用Filter, Tomcat 已經做了個例子, 直接拿來用,

在\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class

copy 到自己的站台\mytest\WEB-INF\classes\filters\裡,(如果package有變更時需要修改.java檔再編譯為.class來使用)

修改mytest\WEB-INF\web.xml, 新增以下的code

<filter>
        <filter-name>SetCharacterEncoding</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
      <filter-name>SetCharacterEncoding</filter-name>
      <url-pattern>

Tips: 如果多個站台都想用這個方法, 可以把filters\SetCharacterEncodingFilter.class 複製到{tomcat}\shared\classes裡, 再修改{有需要用的站台}\WEB-INF\web.xml, 新增以上的code


[GET]

就是用本title第一篇精靈大大的方法, 修改{tomcat}\conf\server.xml,

找到

<Connector port=80
or
<Connector port=8080

新增一句"URIEncoding="UTF-8"", 即

<Connector port=80
URIEncoding=
...略...照原來的, 不用動...

這樣, 用<form method="get">的話, 直接接收就已經是中文了, 如果用link 時, 就要先把中文部分先編碼, 如

<%String str = ;
str = java.net.URLEncoder.encode(str,);
%>
<a href=


直接接收即可


這樣, 基本上就解決了post和get的亂碼問題.


PS. 在修改web.xml 和 server.xml 後一定要記得重開Tomcat


[未解問題]

像shirley_wang 有提到, 用

<form method= enctype=>

還是不行


[我有問題]

browser wrote:
不過當初我最後的做法是使用 Filter 的方式
Filter 的做法就是:先判斷是使用那種傳遞方式( GET or POST),假若是用 GET 的方式就採用第一種 code;若使用POST 方式,就採用第二種 code。

請問browser大大, 如何在Filter裡判斷GET 還是 POST 呢?