JSP和Servlet對(duì)中文的處理過(guò)程(2)_JSP教程
推薦:困擾JSP的一些問(wèn)題與解決方法如今每一個(gè)使用servlets的開(kāi)發(fā)者都知道JSP,一種由Sun公司發(fā)明并花費(fèi)大量精力加以推行并建構(gòu)在servlet技術(shù)之上的web技術(shù)。JSP將servlet中的html代碼脫離了出來(lái),從而可以加速web應(yīng)用開(kāi)發(fā)
再如,把字符串String="\u00d6\u00ec\u00e9\u0046\u00bb\u00f9"進(jìn)行new String (buf.getBytes("GBK"))操作,得到的結(jié)果是“3fa8aca8a6463fa8b4”,其中,“\u00d6”在“GBK”中沒(méi)有對(duì)應(yīng)的字符,得到“3f”,“\u00ec”對(duì)應(yīng)著“a8ac”,“\u00e9”對(duì)應(yīng)著“a8a6”,“0046”對(duì)應(yīng)著“46”(因?yàn)檫@是ASCII字符),“\u00bb”沒(méi)找到,得到“3f”,最后,“\u00f9”對(duì)應(yīng)著“a8b4”。把這個(gè)字符串println一下,得到的結(jié)果是“?ìéF?ù”。看到?jīng)]?這里并不全是問(wèn)號(hào),因?yàn)镚BK與Unicode映射的內(nèi)容中除了漢字外還有字符,本例就是最好的明證。
所以,在漢字轉(zhuǎn)碼時(shí),如果發(fā)生錯(cuò)亂,得到的不一定都是問(wèn)號(hào)噢!不過(guò),錯(cuò)了終究是錯(cuò)了,50步和100步并沒(méi)有質(zhì)的差別。
或者會(huì)問(wèn):如果源字符集中有,而Unicode中沒(méi)有,結(jié)果會(huì)如何?回答是不知道。因?yàn)槲沂诸^沒(méi)有能做這個(gè)測(cè)試的源字符集。但有一點(diǎn)是肯定的,那就是源字符集不夠規(guī)范。在Java中,如果發(fā)生這種情況,是會(huì)拋出異常的。
什么是UTF
UTF,是Unicode Text Format的縮寫(xiě),意為Unicode文本格式。對(duì)于UTF,是這樣定義的:
(1)如果Unicode的16位字符的頭9位是0,則用一個(gè)字節(jié)表示,這個(gè)字節(jié)的首位是“0”,剩下的7位與原字符中的后7位相同,如“\u0034”(0000 0000 0011 0100),用“34” (0011 0100)表示;(與源Unicode字符是相同的);
(2)如果Unicode的16位字符的頭5位是0,則用2個(gè)字節(jié)表示,首字節(jié)是“110”開(kāi)頭,后面的5位與源字符中除去頭5個(gè)零后的最高5位相同;第二個(gè)字節(jié)以“10”開(kāi)頭,后面的6位與源字符中的低6位相同。如“\u025d”(0000 0010 0101 1101),轉(zhuǎn)化后為“c99d”(1100 1001 1001 1101);
(3)如果不符合上述兩個(gè)規(guī)則,則用三個(gè)字節(jié)表示。第一個(gè)字節(jié)以“1110”開(kāi)頭,后四位為源字符的高四位;第二個(gè)字節(jié)以“10”開(kāi)頭,后六位為源字符中間的六位;第三個(gè)字節(jié)以“10”開(kāi)頭,后六位為源字符的低六位;如“\u9da7”(1001 1101 1010 0111),轉(zhuǎn)化為“e9b6a7”(1110 1001 1011 0110 1010 0111);
可以這么描述JAVA程序中Unicode與UTF的關(guān)系,雖然不絕對(duì):字符串在內(nèi)存中運(yùn)行時(shí),表現(xiàn)為Unicode代碼,而當(dāng)要保存到文件或其它介質(zhì)中去時(shí),用的是UTF。這個(gè)轉(zhuǎn)化過(guò)程是由writeUTF和readUTF來(lái)完成的。
好了,基礎(chǔ)性的論述差不多了,下面進(jìn)入正題。
先把這個(gè)問(wèn)題想成是一個(gè)黑匣子。先看黑匣子的一級(jí)表示:
input(charsetA)->process(Unicode)->output(charsetB)
簡(jiǎn)單,這就是一個(gè)IPO模型,即輸入、處理和輸出。同樣的內(nèi)容要經(jīng)過(guò)“從charsetA到unicode再到charsetB”的轉(zhuǎn)化。
再看二級(jí)表示:
SourceFile(jsp,java)->class->output
在這個(gè)圖中,可以看出,輸入的是jsp和java源文件,在處理過(guò)程中,以Class文件為載體,然后輸出。再細(xì)化到三級(jí)表示:
jsp->temp file->class->browser,os console,db
app,servlet->class->browser,os console,db
這個(gè)圖就更明白了。Jsp文件先生成中間的Java文件,再生成Class。而Servlet和普通App則直接編譯生成Class。然后,從Class再輸出到瀏覽器、控制臺(tái)或數(shù)據(jù)庫(kù)等。
分享:JavaBean 在jsp和serlvle中傳遞技術(shù)要點(diǎn)javaBean 在jsp和serlvle中的傳遞技術(shù)要點(diǎn) 一、 初始化javaBean 1、 在jsp中 在上一段的代碼中執(zhí)行過(guò)程如下: ? 按照scope的參數(shù)尋找相同id的javabean,如果找到了就跳出該; ?
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問(wèn)題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
- Servlet和Filter的url匹配url-pattern
- 用JSP來(lái)發(fā)送郵件
- CNET JSP BASICJSP的內(nèi)部對(duì)象
- 利用HSQLDB來(lái)進(jìn)行Hibernate的單元測(cè)試
- 網(wǎng)頁(yè)無(wú)閃自動(dòng)局部刷新實(shí)例
- 在無(wú)線J2ME設(shè)備上實(shí)現(xiàn)HTTP協(xié)議1
- JSP由淺入深6—— JSP聲明
- Servlet+Jsp實(shí)現(xiàn)圖片或文件的上傳功能具體思路及代碼
- 用J2ME在移動(dòng)設(shè)備上實(shí)現(xiàn)動(dòng)畫(huà)1
- 揭秘幾個(gè)提升JSP應(yīng)用程序效率的小方法
猜你也喜歡看這些
- J2EE應(yīng)用服務(wù)器Jboss Tomcat安裝攻略
- CNET JSP BASIC 簡(jiǎn)介
- 解讀applicationcontext.xml
- JSP表單輸入實(shí)例代碼
- JS節(jié)日倒計(jì)時(shí)效果
- Apache Tomcat 5.5部署jsp項(xiàng)目總結(jié)之——jsp亂碼問(wèn)題的解決
- javascript通過(guò)url向jsp頁(yè)面?zhèn)鬟f中文參數(shù)導(dǎo)致亂碼解決方案
- J2ME開(kāi)發(fā)步驟
- J2EE基礎(chǔ)--為什么jsp不能取代servlet
- hibernate的緩存和CRUD
- 相關(guān)鏈接:
- 教程說(shuō)明:
JSP教程-JSP和Servlet對(duì)中文的處理過(guò)程(2)
。