曹亮
摘 要:JSP技術(shù)是動(dòng)態(tài)網(wǎng)頁(yè)制作的關(guān)鍵,也是現(xiàn)今主流的動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)。在網(wǎng)頁(yè)的設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)出現(xiàn)一些中文亂碼的問(wèn)題,嚴(yán)重影響動(dòng)態(tài)網(wǎng)頁(yè)的開(kāi)發(fā)和使用。所以本文先分析了常見(jiàn)的中文編碼格式,然后從4個(gè)方面詳細(xì)闡述了中文亂碼的問(wèn)題及解決方法。
關(guān)鍵詞:JSP技術(shù);中文亂碼;原因;解決方法
由于在動(dòng)態(tài)網(wǎng)頁(yè)制作中,中文主要是利用特殊的字符編碼方式,因此在網(wǎng)頁(yè)制作中很容易產(chǎn)生亂碼問(wèn)題。利用JSP技術(shù)開(kāi)發(fā)的WEB平臺(tái)在任何一個(gè)操作系統(tǒng)之上都能使用,中文亂碼會(huì)給設(shè)計(jì)人員造成很大的困擾。由此可見(jiàn),解決中文亂碼問(wèn)題是JSP技術(shù)開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)必須解決的重要問(wèn)題。
1 常見(jiàn)編碼格式
(1)ISO-8859-1編碼,也稱(chēng)之為L(zhǎng)atin-1編碼。ASCII 編碼的128個(gè)字符顯然是不夠用的,因此ISO組織在此基礎(chǔ)上進(jìn)行了拓展,從 ISO-8859-1到ISO-8859-15,應(yīng)用最廣泛的是ISO-8859-1,主要因?yàn)镮SO-8859-1是單字節(jié)編碼。
(2)Unicode編碼。Unicode是目前最統(tǒng)一的編碼格式,但是它卻不兼容其他任何編碼格式。另外,通常所說(shuō)的UTF-16,就是Unicode字符在計(jì)算機(jī)中存取的方法。
(3)GBK編碼。它是GB2312的拓展,總共含有23 940 個(gè)碼位,能表示21 003個(gè)漢字,并且它與 GB2312編碼格式兼容。
(4)UTF-8。它的主要原理是通過(guò)變長(zhǎng)技術(shù),使不同類(lèi)型的字符能夠由1~6個(gè)字節(jié)組成。
2 亂碼問(wèn)題及解決對(duì)策
中文亂碼問(wèn)題一般會(huì)出現(xiàn)兩種情況:一是在HTML中,二是在JSP動(dòng)態(tài)輸出中。造成中文亂碼的原因有多種,只有深入分析找到亂碼的位置和原因,才能解決問(wèn)題,提高動(dòng)態(tài)網(wǎng)頁(yè)制作效率。
2.1 頁(yè)面亂碼問(wèn)題
如果在進(jìn)行程序調(diào)試時(shí),在顯示界面該出現(xiàn)中文的地方,顯示的是字符或問(wèn)號(hào)。對(duì)這種情況的解決方案是,在jsp頁(yè)面的頭部加入以下代碼<%pagecontentType=”text/html;charset=gb2312”%>,如下列的程序:
<%@ page language=”java” import=”java.util.*” %>
這是一個(gè)中文顯示示例:
<%
String str = “中文”;
out.print(str);
%>
經(jīng)過(guò)瀏覽器顯示之后,本該出現(xiàn)中文顯示示例的中文字符,結(jié)果卻顯示了“? ? ? ?? ? ???? ? ?”這種符號(hào),在處理這種中文亂碼問(wèn)題時(shí),可以將jsp頭部改成<%@ page language=”java”import=”java.util.*”contentType=”text/html;charset=GB2312” %> 這樣中文漢字即可正常顯示。
2.2 參數(shù)傳遞時(shí)出現(xiàn)亂碼問(wèn)題
參數(shù)傳遞時(shí)出現(xiàn)亂碼問(wèn)題,只要在傳遞參數(shù)時(shí),進(jìn)行編碼轉(zhuǎn)換就可以解決。具體代碼為<%String str=newString(request.getParameter(“str”).getBytes(“iso-8859-1”),”gb2312”);%>。
如下列程序:
<%@ page language=”java” import=”java.util.*” contentType=”text/html;charset=gb2312”%>
<%
String param = request.getParameter(“param”);
%>
你提交的參數(shù)為:<%=param%>
在程序運(yùn)行之后,有時(shí)會(huì)顯示提交的參數(shù)為???。這種亂碼在動(dòng)態(tài)網(wǎng)頁(yè)的設(shè)計(jì)開(kāi)發(fā)中經(jīng)常會(huì)發(fā)生。其解決方法是,在原來(lái)代碼中添加URI編碼設(shè)置URIEncoding=“gb2312”。這樣在進(jìn)行程序運(yùn)行之后,就能夠顯示正常的參數(shù)。
2.3 表單亂碼問(wèn)題
表單問(wèn)題產(chǎn)生的主要原因是提交表單的方法程序并不支持中文字符,通常默認(rèn)的編碼格式是ISO-8859-1。一般解決這種問(wèn)題的方法是,在頁(yè)面中或是sevlet中以及在過(guò)濾時(shí)進(jìn)行解決,如設(shè)置 request 和 response 的編碼(頁(yè)面編碼必須為 u8),或者是添加
屬性。無(wú)論是采用哪種解決方法,都需要程序員根據(jù)實(shí)際的程序來(lái)選擇。2.4 瀏覽器不識(shí)別問(wèn)題
瀏覽器不識(shí)別問(wèn)題的主要表現(xiàn)就是在提交中文字符時(shí)出現(xiàn)亂碼問(wèn)題,而提交英文字符時(shí)則顯示正常。產(chǎn)生這種問(wèn)題的主要原因是瀏覽器默認(rèn)的編碼格式和程序編碼格式不兼容,瀏覽器無(wú)法識(shí)別中文字符。解決這種問(wèn)題只須通過(guò)request.setCharacterEncoding(“gb2312”)對(duì)請(qǐng)求進(jìn)行統(tǒng)一編碼即可。這樣經(jīng)過(guò)編碼格式的統(tǒng)一之后,中文字符就會(huì)正常顯示。
3 總結(jié)
綜上所述,中文亂碼產(chǎn)生的主要原因是編碼格式的不統(tǒng)一,并且編碼格式之間基本不兼容。另外,在處理中文亂碼問(wèn)題時(shí),找到亂碼問(wèn)題的原因是解決問(wèn)題的關(guān)鍵。由此可見(jiàn),深入了解JSP技術(shù)是非常有必要的。
參考文獻(xiàn)
[1]徐珊.JSP技術(shù)中的中文亂碼成因與對(duì)策探析[J].山東工業(yè)技術(shù),2015,(19):220.
[2]梅錦峰,陽(yáng)小蘭,錢(qián)程,等.JSP初學(xué)者遇到的中文亂碼問(wèn)題及解決方案[J].黑龍江科技信息,2016,(4):180.
(作者單位:哈爾濱市南崗房產(chǎn)經(jīng)營(yíng)物業(yè)管理有限責(zé)任公司第一分公司)