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