日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

JSP和Servlet對中文的處理過程(5)_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:困擾JSP的一些問題與解決方法
如今每一個使用servlets的開發(fā)者都知道JSP,一種由Sun公司發(fā)明并花費大量精力加以推行并建構在servlet技術之上的web技術。JSP將servlet中的html代碼脫離了出來,從而可以加速web應用開發(fā)

CLASS文件中的中文表示法是不是昭然若揭了?OK,接下來看看CLASS又是怎樣輸出中文的呢?

Class:輸出字符串

上文說過,字符串在內存中表現(xiàn)為Unicode編碼。至于這種Unicode編碼表示了什么,那要看它是從哪種字符集映射過來的,也就是說要看它的祖先。這好比在托運行李時,外觀都是紙箱子,里面裝了什么就要看寄郵件的人實際郵了什么東西。

看看上面的例子,如果給一串Unicode編碼“00D6 00D0 00CE 00C4”,如果不作轉換,直接用Unicode碼表來對照它時,是四個字符(而且是特殊字符);假如把它與“ISO8859-1”進行映射,則直接去掉前面的“00”即可得到“D6 D0 CE C4”,這是ASCII碼表中的四個字符;而假如把它當作GB2312來進行映射,得到的結果很可能是一大堆亂碼,因為在GB2312中有可能沒有(也有可能有)字符與00D6等字符對應(如果對應不上,將得到0x3f,也就是問號,如果對應上了,由于00D6等字符太靠前,估計也是一些特殊符號,真正的漢字在Unicode中的編碼從4E00開始)。

各位看到了,同樣的Unicode字符,可以解釋成不同的樣子。當然,這其中有一種是我們期望的結果。以上例而論,“D6 D0 CE C4”應該是我們所想要的,當把“D6 D0 CE C4”輸出到IE中時,用“簡體中文”方式查看,就能看到清楚的“中文”兩個字了。(當然了,如果你一定要用“西歐字符”來看,那也沒辦法,你將得不到任何有何時何地的東西)為什么呢?因為“00D6 00D0 00CE 00C4”本來就是由ISO8859-1轉化過去的。

給出如下結論:

在Class輸出字符串前,會將Unicode的字符串按照某一種內碼重新生成字節(jié)流,然后把字節(jié)流輸入,相當于進行了一步“String.getBytes(???)”操作。???代表某一種字符集。

如果是Servlet,那么,這種內碼就是在HttpServletResponse.setContentType()方法中指定的內碼,也就是上文定義的。

如果是JSP,那么,這種內碼就是在中指定的內碼,也就是上文定義的。

如果是Java程序,那么,這種內碼就是file.encoding中指定的內碼,默認為ISO8859-1。

當輸出對象是瀏覽器時

以流行的瀏覽器IE為例。IE支持多種內碼。假如IE接收到了一個字節(jié)流“D6 D0 CE C4”,你可以嘗試用各種內碼去查看。你會發(fā)現(xiàn)用“簡體中文”時能得到正確的結果。因為“D6 D0 CE C4”本來就是簡體中文中“中文”兩個字的編碼。

OK,完整地看一遍。

JSP:源文件為GB2312格式的文本文件,且JSP源文件中有“中文”這兩個漢字

如果指定了為GB2312,轉化過程如下表。

表4 Jsp-charset = GB2312時的變化過程

序號
步驟說明
結果

1
編寫JSP源文件,且存為GB2312格式
D6 D0 CE C4

(D6D0=中 CEC4=文)

2
jspc把JSP源文件轉化為臨時JAVA文件,并把字符串按照GB2312映射到Unicode,并用UTF格式寫入JAVA文件中
E4 B8 AD E6 96 87

3
把臨時JAVA文件編譯成CLASS文件
E4 B8 AD E6 96 87

4
運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼
4E 2D 65 87(在Unicode中4E2D=中 6587=文)

5
根據(jù)Jsp-charset=GB2312把Unicode轉化為字節(jié)流
D6 D0 CE C4

6
把字節(jié)流輸出到IE中,并設置IE的編碼為GB2312(作者按:這個信息隱藏在HTTP頭中)
D6 D0 CE C4

7
IE用“簡體中文”查看結果
“中文”(正確顯示)


如果指定了為ISO8859-1,轉化過程如下表。

表5 Jsp-charset = ISO8859-1時的變化過程

序號
步驟說明
結果

1
編寫JSP源文件,且存為GB2312格式
D6 D0 CE C4

(D6D0=中 CEC4=文)

2
jspc把JSP源文件轉化為臨時JAVA文件,并把字符串按照ISO8859-1映射到Unicode,并用UTF格式寫入JAVA文件中
C3 96 C3 90 C3 8E C3 84

3
把臨時JAVA文件編譯成CLASS文件
C3 96 C3 90 C3 8E C3 84

4
運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼
00 D6 00 D0 00 CE 00 C4

(啥都不是�。。。�

5
根據(jù)Jsp-charset=ISO8859-1把Unicode轉化為字節(jié)流
D6 D0 CE C4

6
把字節(jié)流輸出到IE中,并設置IE的編碼為ISO8859-1(作者按:這個信息隱藏在HTTP頭中)
D6 D0 CE C4

7
IE用“西歐字符”查看結果
亂碼,其實是四個ASCII字符,但由于大于128,所以顯示出來的怪模怪樣

8
改變IE的頁面編碼為“簡體中文”
“中文”(正確顯示)

分享:JavaBean 在jsp和serlvle中傳遞技術要點
javaBean 在jsp和serlvle中的傳遞技術要點 一、 初始化javaBean 1、 在jsp中 在上一段的代碼中執(zhí)行過程如下: ? 按照scope的參數(shù)尋找相同id的javabean,如果找到了就跳出該; ?

來源:模板無憂//所屬分類:JSP教程/更新時間:2008-08-22
相關JSP教程