最近被學弟問到亂碼問題,就稍微整理了下相關資料。
1、亂碼之獲取request參數亂碼
亂碼原因:服務端在獲取參數內容的時候採用的碼錶與客戶端發送請求內容採用的碼錶不一致。
解決方案:對於post請求可在獲取參數之前加上代碼request.setCharacterEncoding("碼錶");對於get請求:在獲取內容後先編碼再解碼,代碼如下:
String param=request.getParam("key");
param=new String(param.getBytes("iso8859-1"),"utf-8");
utf-8是瀏覽器採用的碼錶,iso8859-1是老外經常使用的碼錶。
對於get請求還可以過濾器中通過動態代理處理。
2、亂碼之JSP page指令分析
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
pageEncoding屬性是用來告訴web服務器(如Tomcat)使用什麼碼錶將JSP文件翻譯成servlet類文件。因此如果你的JSP文件保存的時候採用的碼錶與pageEncoding指定的不一致一定會出現亂碼現象。eclipse會智能的根據你設置的pageEncoding屬性來選擇保存JSP文件採用的編碼方式。
contentType屬性是用來告訴瀏覽器在接受到response後採用的碼錶,如果他與pageEncoding不一致的話也會亂碼。通常我們可以不設置該屬性,因爲web服務器在翻譯JSP文件的時候默認將其設置爲與pageEncoding一致。