關于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一下,我是封裝的一下用的。
經過以上幾步,基本上亂碼的問題解決了。