只要掌握了中文亂碼問題產生的原因,然後對症下藥,就可以順利地解決這些問題。下面我們對容易產生亂碼問題的場景進行分析,並提出解決方案。
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");
}
Java中文亂碼問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Spring中@Autowired註解、@Resource註解的區別
cucmber
2018-08-27 19:55:26
循環單鏈表--JAVA
雅希
2018-08-27 19:45:07
循環雙鏈表--JAVA
雅希
2018-08-27 19:45:06
Java 內存區域與內存溢出異常
wolf犭良
2018-08-27 19:44:20
基於JDK1.7Update14之後的HotSpot虛擬機垃圾收集器
wolf犭良
2018-08-27 19:44:19
轉一篇寫得不錯的J2EE簡介
kagami_QB
2018-08-27 19:38:14
JAVA 輸出 你 我 他
ycj170320
2018-08-27 19:34:26
JAVA 集合的使用
ycj170320
2018-08-27 19:34:25
類與對象 實驗一 機動車
ycj170320
2018-08-27 19:34:25
淺談Java中的Set、List、Map的區別
huxijiuhao
2018-08-27 19:33:14
九度online judge-A + B
huxijiuhao
2018-08-27 19:33:14
Mybatis源碼淺析、定製原理及方法
向ET同志学习
2018-08-27 19:32:39