falldog 发表于 2017-1-23 09:51:07

中文乱码_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 會是比較好的選擇。
页: [1]
查看完整版本: 中文乱码_Tomcat_解决方案