中文乱码_Tomcat_解决方案

缘由:

大凡做过几年开发的,尤其是与Web相关的,估计没有一个例外,都要碰到中文乱码问题。甚至连我们公司经验丰富的Website组都要在这个上面栽跟头。

最近要为CIS系统的UI增加些Tool功能,居然又碰到这个问题。

仔细检查,发现我已经遵守了防止中文乱码的铁律:前后端全部设置UTF-8格式。也就是说我的页面不论是php/html/jsp都已经设置UTF-8格式,服务端也设置了统一的格式UTF-8。

同时,按照我的测试印象,前两天本页面还没有发现这个问题,怎么今天就报错了呢?

 

经过一番google与测试,结果如下。

1. 前提遵守防止中文乱码的铁律:前后端全部设置UTF-8格式

2. Tomcat中,form提交需要用post,而get方法对中文依旧乱码

    我测试时为了利用get方法的方便,居然忘记了改回去。

3. 别的Server如Jetty等,需要测试和参考文档,一些细节请仔细读下面思考

 

java form submit 中文亂碼問題

這個問題陸續遇到幾次了,始終知其然而不知其所以然。這是最近一次的處理案例:

環境

OS: CentOS 5.2 (utf-8)

Database: MySQL 5 (utf-8)

Application server: Tomcat 6

網頁

<input type=text name=keyword>

程式

String keyword=request.getParameter(“keyword”);

網頁的 input 輸入中文 submit 後由以上程式碼接取,原本的中文都變成亂碼。解決的方法是改用以下的接取程式碼,將收到的字串重新編碼。

String keyword=new String(request.getParameter(“keyword”).getBytes(“iso8859-1″),”utf-8″);

Why

Tomcat 在處理 GET、POST 參數時預設是採用 ISO-8859-1 編碼,請參考此 網址 URIEncoding 部份的說明,所以第2 段程式才會 work,請隨著您的作業系統及資料庫編碼設定,調整接取參數的程式碼。

Browser

以上的例子是送一個 keyword 到 tomcat web application 查詢資料,後來出現另一個問題,從 Firefox 送出中文的 keyword 可以正確的查到資料,Explorer 卻查不到,經過測試和查詢相關資料後發現,從 Explorer 送出 keyword 前要用 javascript encodeURIComponent() 編碼後再送出才會正常查到資料。

2008.11.27 加註

上面情形是發生在未指定 form 的 method,根據規格預設會以 get 傳送資料,Tomcat 的文件也沒有說明 URIEncoding 是會針對 get 或 post method 作處理。今天又遇到 form submit 中文亂碼問題,這次也不用重新編碼參數了,直接把 form method 設定 post,問題就解決了。看來 submit 的 form 有中文時,用 post method 會是比較好的選擇。

 

 

 

你可能感兴趣的:(JavaScript,tomcat,mysql,centos,firefox)