天天看點

Tomcat UTF-8 亂碼問題解決辦法

關于java的亂碼,一直是雙位元組字元環境開發者的問題,不同的服務,不同的版本,甚至不同的系統環境,都有很大的影響。

今天說一下,在中文windows下,Tomcat5.5服務下的,UTF-8的亂碼解決問題。

首先要需要了解的是web容器預設編碼是iso-8859-1,一個漢字占用兩個位元組,而在utf-8中一個漢字占用三個位元組。是以在資料傳遞過程中,必須手動設定容器編碼格式,否則會出現字元位丢失的情況。即3個位元組變為兩個位元組,自然會變成亂碼。

其次,Tomcat 5以後,對post和get方法的編碼控制分開了,像以前那樣,僅僅

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

不能解決問題了。

明白了這個以後,再來看

第一步,修改tomcat。

找到對應站點的server.xml後,在裡面的Connector标簽裡面添加

useBodyEncodingForURI="true"

這句的話告訴tomcat用頁面的編碼去處理post,推薦使用。

這塊有句更狠的就是

URIEncoding="utf-8"

不過是強制指定編碼了,是以一旦有其他編碼的頁面存在,就會出問題,是以不建議用。

第二步,修改jsp頁面頭。

我是偷懶,全都加上了

<%@ page language="java"  pageEncoding="UTF-8"%>

,然後在html标簽的head标簽裡加上

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

第三步,修改指定編碼。

在jsp頭部分,任何request和response被使用前,加上

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

經過以上三步後,post過來的文字就可以正常的用request.getParameter()取得并使用了。

第四步,修改用get方法傳出的連接配接參數。

new String(java.net.URLEncoder.encode("輸入文字","UTF-8"));

記得try一下,我是封裝的一下用的。

經過以上幾步,基本上亂碼的問題解決了。