Java中文亂碼問題

只要掌握了中文亂碼問題產生的原因,然後對症下藥,就可以順利地解決這些問題。下面我們對容易產生亂碼問題的場景進行分析,並提出解決方案。
1.以POST方法提交的表單數據中有中文字符
由於Web容器默認的編碼方式是ISO-8859-1,在Servlet/JSP程序中,通過請求對象的getParameter()方法得到的字符串是以ISO-8859-1轉換而來,
這是導致亂碼產生的原因之一。爲了避免容器以ISO-8859-1的編碼方式返回字符串,對於以POST方法提交的表單數據,可以在獲取請求參數值之前,
調用request.setCharacterEncoding("GBK"),明確指定請求正文使用的字符編碼方式是GBK。在向瀏覽器發送中文數據之前,
調用response.setContentType("text/html;charset=GBK"),指定輸出內容的編碼方式是GBK。
對於JSP頁面,在獲取請求參數值之前,寫上下面的代碼:
<%request.setCharacterEncoding("GB2312");%>
爲了指定輸出內容的編碼格式,設置page指令contentType屬性,如下:
<%@ page contentType="text/html; charset=GBK" %>
在Web容器轉換JSP頁面後的Servlet類中,會自動添加下面的代碼:
response.setContentType("text/html; charset=GBK");
2.以GET方法提交的表單數據中有中文字符
當提交表單採用GET方法時,提交的數據作爲查詢字符串被附加到URL的末端,發送到服務器,此時在服務器端調用setCharacterEncoding()方法也就沒有作用了。
我們需要在得到請求參數的值後,自己做正確的編碼轉換。
String name = request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"GBK");
在第一行,調用getParameter()方法得到的字符串name的Unicode值是以ISO-8859-1編碼轉換而來,調用name.getBytes("ISO-8859-1"),將得到原始的GBK編碼值,
接着,對new String()的調用將以GBK字符集重新構造字符串的Unicode編碼。
爲了方便從ISO-8859-1編碼到GBK的轉換,我們可以編寫一個工具方法,如下:
public String toGBK(String str)
throws java.io.UnsupportedEncodingException
{
return new String(str.getBytes("ISO-8859-1"),"GBK");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章