jsp中文亂碼六種情況---解決方案
來源:http://blog.csdn.net/lovesummerforever/article/details/12290319
亂碼是讓人頭疼的一件事情,您是否和我一樣也遇到過這樣的情況,向數據庫中添加一條記錄,記錄是添加上了,到數據庫里一看,數據凌亂了。。。頓時我也凌亂了。。。把html文件改為jsp文件,添加了一下jsp page指令重新打開同時發現所有的中文都七十二變了。。是否。。下面我們就一起看看Java web中的中文亂碼問題。
1、JSP頁面出現的中英文亂碼:
我們的PageCharset.jsp頁面代碼如下所示:
當我們在保存我們的文件的時候會出現下面的提示:

整因為在我們的MyEclipse中默認的編碼為ISO-8859-1,而ISO-8859-1不支持中文的編碼,所以jsp頁面代碼如果出現中文就不能保存了。對於這樣的錯誤,我們只要在頁面上加上支持中文的編碼格式就可以了,在jsp頁面中加上pageEncoding=“gb2132” 支持中頁面的編碼格式就可以了。這樣我們就能正常保存我們的jsp源文件了。
2、URL傳遞參數中文亂碼
啟動tomcat運行結果出現url傳遞的中文亂碼:

這里我們需要配置tomcat服務器文件,才能解決這個問題。具體方法是,在tomcat的conf目錄下找到server.xml配置文件,找到如下代碼
在后面添加上編碼方式,URIEncoding="gb2312" 重新啟動tomcat問題就解決了。
3、表單提交中問亂碼
對於表單中提交的數據,可以用request.getPraramter("");方法來獲取,但是當表單中出現中文數據的時候就會出現亂碼。
我們的提交表單的頁面,FormCharset.jsp頁面如下:
我們的AcceptFormCharset.jsp頁面:
提交表單:

結果如下:

我們看到我們在表單中的中文數據出現了亂碼,為什么楚翔這種情況呢?是因為我們的tomcat中,對於以post方式提交的表單編碼格式默認為ISO-8859-1的編碼格式,而這種編碼格式是不能編碼中文的,所以就會出現亂碼的現象了。對於這種情況,我們可以對表單中的數據進行處理,在取得表單參數的時候設置編碼方式,我們更改了我們的接受表單數據的頁面如下所示:
這樣就得到我們想要的效果啦:

4、數據庫操作中文亂碼
我們在建立數據庫的時候,最好是能選擇支持中文編碼格式,最好是能和jsp頁面編碼格式保持一致,這樣就盡可能的減少數據庫操作中文亂碼的問題,最開始的連接數據庫的時候,編寫好數據庫的編碼策略,也就是使用這種形式的URL:jdbc:Oracle:thin:@localhost:1521:TEST;userEnicode=true;characterEncoding=gb2312; 這樣我們選擇的數據庫的編碼和我們的jsp編碼就一致了。
寫入到數據庫的時候,數據庫中中文亂碼:
但是如果我們在最開始的時候沒有對數據庫的編碼進行設置,並且我們的數據庫中已經有大量的數據的話,我們再向數據庫中寫入中文數據,數據庫中的中文顯示為亂碼。在寫入數據的時候出現亂碼,是因為我們在處理表單的時候沒有對字符的編碼設置,對於這種情況,我們在jsp中或servlet中加入:
rquest.setCharacterEncoding("gb2312");//處理表單請求的時候設置編碼。
這樣再看我們的數據庫,插入的中文字段就不會亂碼了。
從數據庫中讀出中文亂碼:
數據庫中的中文出現亂碼,就是在讀取數據庫的時候進行轉碼,這樣顯示就不會亂碼了。我們整理這樣的一個轉碼函數:
public String encoder(String str) throws UnsupportedEncodingException
{
String result = new String(str.getBytes("ISO-ISO-8859-1)"),"gb2312");
}
5 在myeclipse開發工具中打開中文顯示亂碼
在myeclipse中默認的編碼方式為ISO-8859-1,所以打開有其他編譯器編碼的jsp頁面就會出現亂碼,是因為兩個編譯器保存源文件編碼格式不同,在UltralEdit可以支持中文,但是在Eclipse對jsp文件的保存方式為ISO-8895-1,這種編碼不支持中文,所以就會出現亂碼。
對於這種情況,我們可以更改myeclipse默認的編碼方案,myeclipse->Window->Preferences->General->Content types->Test->JSP

這樣問題就解決啦!
6 Filter批量設置編碼格式
我們對於每一個jsp或servlet我們都要設置編碼格式,效率有些低,我們的servlet的Filter解決了我們的問題。在前篇寫過Filter的解決中文亂碼問題的文章,在這里就不贅述了。http://blog.csdn.NET/lovesummerforever/article/details/9924413
需要強調的一點,開始使用Java model1模型的時候,我們在web.xml中配置只需要配置好jsp頁面就可以了,在model2模型中我們使用servlet作為控制器,我們就需要在Filter的配置文件web.xml中配置好servlet的設置,對所有的servlet處理的表單編碼進行設置。
</article>
<!-- !empty($pre_next_article[0]) -->
</div>
