任憲臻+梁宏英
摘要:在Java Web應(yīng)用開發(fā)過程中,顯示中文信息頁面時經(jīng)常出現(xiàn)亂碼問題。出現(xiàn)中文亂碼問題的根本主要在于字符編碼,大部分亂碼是因頁面編碼不一致引起。筆者根據(jù)實際應(yīng)用開發(fā)中遇到的問題,對基于Eclipse Java EE IDE for Web Developers(以下簡稱Eclipse EE)+Tomcat8.0開發(fā)中遇到的JSP中文亂碼問題,總結(jié)提出了一種行之有效的解決辦法,可以有效地解決JSP中文亂碼問題。
關(guān)鍵詞:字符集;字符編碼;中文亂碼
中圖分類號:TP31 文獻標(biāo)識碼:A 文章編號:1007-9416(2017)01-0154-01
在Java Web應(yīng)用開發(fā)中,JSP頁面顯示中文信息亂碼一般表現(xiàn)為:JSP編碼亂碼、HTML編碼亂碼、request獲取數(shù)據(jù)亂碼、response輸出信息亂碼等,本文主要針對出現(xiàn)的這些亂碼問題,提出一種行之有效的解決中文顯示亂碼的方法。
1 字符集與字符編碼
字符是各種文字和符號的總稱,包括各個國家的文字、標(biāo)點符號、圖形符號、數(shù)字等,而字符集是多個字符的集合。字符集種類較多,常見字符集有ASCII字符集、GB2312字符集、GBK字符集、GB18030字符集、Unicode字符集等。
計算機要處理各種字符集中的字符,首先需要對字符進行編碼,以便計算機能夠識別、存儲各種字符。所謂字符編碼,是指以二進制數(shù)字對應(yīng)字符集中的字符,即規(guī)定每個字符分別用一個字節(jié)還是多個字節(jié)存儲、用哪些字節(jié)存儲等。因此,對字符進行編碼是信息交流的技術(shù)基礎(chǔ)。字符編碼和字符集不同,一種字符集可以有一種或多種字符編碼,如Unicode字符集有多種編碼方式,如UTF-8、UTF-16、UTF-32等。
2 在Eclipse EE下更改默認(rèn)字符集編碼
為了使開發(fā)的Java Web應(yīng)用能夠具有更好的國際化支持、能夠最大程度地支持中文輸出,在Eclipse EE下編寫文件最好使用UTF-8編碼。在Eclipse EE下修改默認(rèn)字符集編碼的方法如下:
(1)依次單擊Window->Preferences->General->Wordspace,在右側(cè)的Text file encoding處,勾選other選項,選擇UTF-8。
(2)依次單擊Window-> Preferences ->Web->CSS Files/HTML Files/JSP Files(每次選擇一種類型的文件設(shè)置),在右側(cè)的Encoding處,選擇“ISO 10646/Unicode(UTF-8)”。
(3)完成以上操作,單擊“OK”按鈕保存設(shè)置。至此,文件編碼設(shè)置完畢。
3 修改Tomcat8.0的server.xml文件
在tomcat8.0安裝目錄下的conf目錄中,有一個名為server.xml的文件,該文件主要用于對整個容器進行相關(guān)的配置。在server.xml文件中,被稱為連接器的
為了避免中文顯示亂碼,可以為
指定URIEncoding="UTF-8"后,如果請求的URL里面的參數(shù)也是使用UTF-8編碼,那么即使URL請求的參數(shù)中包含了中文字符,在客戶端顯示中文也不會出現(xiàn)亂碼,但是如果URL里面的參數(shù)不是使用UTF-8編碼(如使用GBK編碼),此時因為請求URL的編碼與Tomcat解碼應(yīng)用的編碼不一致,如果客戶端未對接收的信息進行正確的編碼轉(zhuǎn)換,可能就會發(fā)生中文顯示亂碼問題。因此,為了避免亂碼,請求URL的編碼方式盡量要與tomcat的解碼方式保持一致。
但是麻煩的是,沒有規(guī)范明確指定URL采用的具體的編碼方法,而是交給應(yīng)用程序(瀏覽器)自己決定,這就導(dǎo)致“URL編碼”成為了一個混亂的領(lǐng)域。目前很多瀏覽器使用UTF-8作為URL的默認(rèn)編碼,也有瀏覽器使用“ISO-8859-1”編碼URL,或者使用當(dāng)前頁面的編碼。為了使請求URL的編碼方式與Tomcat服務(wù)器的解碼方式保持一致,可以指定瀏覽器發(fā)送請求信息時的編碼,如在IE11中,可以指定以UTF-8編碼發(fā)送URL路徑,如圖1所示。
4 編碼設(shè)置總結(jié)
經(jīng)過上述設(shè)置,JSP中文亂碼問題基本可以得到解決,但是有以下幾點在實際應(yīng)用中還需要注意:
(1)Tomcat配置文件Server.xml中URIEncoding="UTF-8" 設(shè)置只對get類型的請求有效,對post請求類型無效。所以即使配置了URIEncoding="UTF-8",在服務(wù)器端接收到的post類型的請求參數(shù)編碼仍然為“ISO-8859-1”,而不是“UTF-8”。
(2)使用post請求時,為了避免中文亂碼顯示,可以在獲取請求參數(shù)值前,首先設(shè)置request對象和response對象的字符編碼。
<% request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>
(3)如果JSP程序中使用了Java Bean的屬性設(shè)置語句,那么上述2)中的字符編碼設(shè)置一定要放置在Java Bean屬性設(shè)置之前。
<%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>
參考文獻
[1]宋智軍,邱仲潘.JSP從入門到精通.電子工業(yè)出版社,2012.
[2]何福貴,張海,張力展,著.JSP開發(fā)案例教程.機械工業(yè)出版社,2013.
[3]耿祥義,張躍平.JSP基礎(chǔ)教程.清華大學(xué)出版社,2009.