今天做實驗室的網站,整合kindeditor到struts2框架內,提交新聞標題和內容時,又遇到了常見的亂碼問題,去網上百度了很多相關的解決方案,基本上都無法給出綜合的答案,片面的居多,有可能不是自己想要的解決方案.因此,我結合搜索到的解決方案再加上早上調試的成果,整理了這篇文章,供後來遇到這個問題的同學分享下,下次遇到就不必向我這樣弄了一個早上,少走點彎路,.
我遇到的問題是利用JSP往後臺的action傳遞表單數據時出現了亂碼的問題.我剛開始以爲是MyEclipse編輯器的問題,於是點擊MyEclipsede的Project->Properties->Resources,在彈出的對話框中統一了頁面的編輯格式爲UTF8.以支持UTF8編碼的呈現.再修改JSP頁面的編碼,並且修改了Struts默認的編碼格式;如下
1.在struts.xml中添加<constant name="struts.i18n.encoding" value="UTF-8"/>
2.在jsp頁面中添加<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
其中<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>是約束JSP頁面中嵌套的Java代碼的編碼的編碼方式
而 <meta http-equiv="content-type" content="text/html; charset=utf-8" />使約束JSP中的html靜態頁面的編碼方式的
修改表單提交的方法爲get方法.但是依舊出現亂碼問題,在後臺打印得到的字符串得到的是????????????這樣的亂碼.於是嘗試在Struts2中調用的set方法對獲取到的String變量(假設爲content)調用
new String(content.getBytes(),"utf8")打印出來的是另一種亂碼.
於是索性自己寫了個main方法,將瀏覽器裏uri裏帶的content內容給截取下來,如下所示:
public static void main(String args[])
{
try {
String str=java.net.URLDecoder.decode("%E4%BD%A0%E5%A5%BD%E5%95%8A","utf8");
System.out.println("str:"+str);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
%E4%BD%A0%E5%A5%BD%E5%95%8A實際是我提交的"你好啊"轉成utf8格式後的表示形式.因此可以斷定,JSP頁面提交給後臺的編碼格式是正確的,問題出在了Tomcat服務器這邊
我又調用了
String param = ServletActionContext.getRequest().getParameter("參數名");方法獲取下content的內容,依舊是?????????這樣的亂碼.因此可以斷定,Tomcat在幫助我解析URI參數時並沒有指定用UTF8格式的方式進行轉碼.因此百度了下.找到下面的解決方法: