JSP和Servlet對中文的處理過程(3)_JSP教程
推薦:困擾JSP的一些問題與解決方法如今每一個使用servlets的開發(fā)者都知道JSP,一種由Sun公司發(fā)明并花費(fèi)大量精力加以推行并建構(gòu)在servlet技術(shù)之上的web技術(shù)。JSP將servlet中的html代碼脫離了出來,從而可以加速web應(yīng)用開發(fā)
JSP:從源文件到Class的過程
Jsp的源文件是以“.jsp”結(jié)尾的文本文件。在本節(jié)中,將闡述JSP文件的解釋和編譯過程,并跟蹤其中的中文變化。
1、JSP/Servlet引擎提供的JSP轉(zhuǎn)換工具(jspc)搜索JSP文件中用中指定的charset。如果在JSP文件中未指定,則取JVM中的默認(rèn)設(shè)置file.encoding,一般情況下,這個值是ISO8859-1;
2、jspc用相當(dāng)于“javac –encoding ”的命令解釋JSP文件中出現(xiàn)的所有字符,包括中文字符和ASCII字符,然后把這些字符轉(zhuǎn)換成Unicode字符,再轉(zhuǎn)化成UTF格式,存為JAVA文件。ASCII碼字符轉(zhuǎn)化為Unicode字符時只是簡單地在前面加“00”,如“A”,轉(zhuǎn)化為“\u0041”(不需要理由,Unicode的碼表就是這么編的)。然后,經(jīng)過到UTF的轉(zhuǎn)換,又變回“41”了!這也就是可以使用普通文本編輯器查看由JSP生成的JAVA文件的原因;
3、引擎用相當(dāng)于“javac –encoding UNICODE”的命令,把JAVA文件編譯成CLASS文件;
先看一下這些過程中中文字符的轉(zhuǎn)換情況。有如下源代碼:
這段代碼是在UltraEdit for Windows上編寫的。保存后,“中文”兩個字的16進(jìn)制編碼為“D6 D0 CE C4”(GB2312編碼)。經(jīng)查表,“中文”兩字的Unicode編碼為“\u4E2D\u6587”,用 UTF表示就是“E4 B8 AD E6 96 87”。打開引擎生成的由JSP文件轉(zhuǎn)變而成的JAVA文件,發(fā)現(xiàn)其中的“中文”兩個字確實被“E4 B8 AD E6 96 87”替代了,再查看由JAVA文件編譯生成的CLASS文件,發(fā)現(xiàn)結(jié)果與JAVA文件中的完全一樣。
再看JSP中指定的CharSet為ISO-8859-1的情況。
同樣,該文件是用UltraEdit編寫的,“中文”這兩個字也是存為GB2312編碼“D6 D0 CE C4”。先模擬一下生成的JAVA文件和CLASS文件的過程:jspc用ISO-8859-1來解釋“中文”,并把它映射到Unicode。由于ISO-8859-1是8位的,且是拉丁語系,其映射規(guī)則就是在每個字節(jié)前加“00”,所以,映射后的Unicode編碼應(yīng)為“\u00D6\u00D0\u00CE\u00C4”,轉(zhuǎn)化成UTF后應(yīng)該是“C3 96 C3 90 C3 8E C3 84”。好,打開文件看一下,JAVA文件和CLASS文件中,“中文”果然都表示為“C3 96 C3 90 C3 8E C3 84”。
如果上述代碼中不指定,即把第一行寫成“”,JSPC會使用file.encoding的設(shè)置來解釋JSP文件。在RedHat 6.2上,其處理結(jié)果與指定為ISO-8859-1是完全相同的。
到現(xiàn)在為止,已經(jīng)解釋了從JSP文件到CLASS文件的轉(zhuǎn)變過程中中文字符的映射過程。一句話:從“JspCharSet到Unicode再到UTF”。下表總結(jié)了這個過程:
表2 “中文”從JSP到CLASS的轉(zhuǎn)化過程
Jsp-CharSet
JSP文件中
JAVA文件中
CLASS文件中
GB2312
D6 D0 CE C4
(GB2312)
從\u4E2D\u6587(Unicode)到
E4 B8 AD E6 96 87 (UTF)
E4 B8 AD E6 96 87 (UTF)
ISO-8859-1
D6 D0 CE C4
(GB2312)
從\u00D6\u00D0\u00CE\u00C4 (Unicode)到C3 96 C3 90 C3 8E C3 84 (UTF)
C3 96 C3 90 C3 8E C3 84 (UTF)
無(默認(rèn)=file.encoding)
同ISO-8859-1
同ISO-8859-1
同ISO-8859-1
分享:JavaBean 在jsp和serlvle中傳遞技術(shù)要點(diǎn)javaBean 在jsp和serlvle中的傳遞技術(shù)要點(diǎn) 一、 初始化javaBean 1、 在jsp中 在上一段的代碼中執(zhí)行過程如下: ? 按照scope的參數(shù)尋找相同id的javabean,如果找到了就跳出該; ?
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-JSP和Servlet對中文的處理過程(3)
。