JSP和Servlet對(duì)中文的處理過(guò)程_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ā)
世界上的各地區(qū)都有本地的語(yǔ)言。地區(qū)差異直接導(dǎo)致了語(yǔ)言環(huán)境的差異。在開(kāi)發(fā)一個(gè)國(guó)際化程序的過(guò)程中,處理語(yǔ)言問(wèn)題就顯得很重要了。
這是一個(gè)世界范圍內(nèi)都存在的問(wèn)題,所以,Java提供了世界性的解決方法。本文描述的方法是用于處理中文的,但是,推而廣之,對(duì)于處理世界上其它國(guó)家和地區(qū)的語(yǔ)言同樣適用。
漢字是雙字節(jié)的。所謂雙字節(jié)是指一個(gè)雙字要占用兩個(gè)BYTE的位置(即16位),分別稱為高位和低位。中國(guó)規(guī)定的漢字編碼為GB2312,這是強(qiáng)制性的,目前幾乎所有的能處理中文的應(yīng)用程序都支持GB2312。GB2312包括了一二級(jí)漢字和9區(qū)符號(hào),高位從0xa1到0xfe,低位也是從0xa1到0xfe,其中,漢字的編碼范圍為0xb0a1到0xf7fe。
另外有一種編碼,叫做GBK,但這是一份規(guī)范,不是強(qiáng)制的。GBK提供了20902個(gè)漢字,它兼容GB2312,編碼范圍為0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0。
在不久的將來(lái),中國(guó)會(huì)頒布另一種標(biāo)準(zhǔn):GB18030-2000(GBK2K)。它收錄了藏、蒙等少數(shù)民族的字型,從根本上解決了字位不足的問(wèn)題。注意:它不再是定長(zhǎng)的。其二字節(jié)部份與GBK兼容,四字節(jié)部分是擴(kuò)充的字符、字形。它的首字節(jié)和第三字節(jié)從0x81到0xfe,二字節(jié)和第四字節(jié)從0x30到0x39。
本文不打算介紹Unicode,有興趣的可以瀏覽“http://www.unicode.org/”查看更多的信息。Unicode有一個(gè)特性:它包括了世界上所有的字符字形。所以,各個(gè)地區(qū)的語(yǔ)言都可以建立與Unicode的映射關(guān)系,而Java正是利用了這一點(diǎn)以達(dá)到異種語(yǔ)言之間的轉(zhuǎn)換。
在JDK中,與中文相關(guān)的編碼有:
表1 JDK中與中文相關(guān)的編碼列表
編碼名稱
說(shuō) 明
ASCII
7位,與ascii7相同
ISO8859-1
8-位,與 8859_1,ISO-8859-1,ISO_8859-1,latin1...等相同
GB2312-80
16位,與gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381, 1383, Cp1383, ISO2022CN,ISO2022CN_GB...等相同
GBK
與MS936相同,注意:區(qū)分大小寫
UTF8
與UTF-8相同
GB18030
與cp1392、1392相同,目前支持的JDK很少
在實(shí)際編程時(shí),接觸得比較多的是GB2312(GBK)和ISO8859-1。
為什么會(huì)有“?”號(hào)
上文說(shuō)過(guò),異種語(yǔ)言之間的轉(zhuǎn)換是通過(guò)Unicode來(lái)完成的。假設(shè)有兩種不同的語(yǔ)言A和B,轉(zhuǎn)換的步驟為:先把A轉(zhuǎn)化為Unicode,再把Unicode轉(zhuǎn)化為B。
舉例說(shuō)明。有GB2312中有一個(gè)漢字“李”,其編碼為“C0EE”,欲轉(zhuǎn)化為ISO8859-1編碼。步驟為:先把“李”字轉(zhuǎn)化為Unicode,得到“674E”,再把“674E”轉(zhuǎn)化為ISO8859-1字符。當(dāng)然,這個(gè)映射不會(huì)成功,因?yàn)镮SO8859-1中根本就沒(méi)有與“674E”對(duì)應(yīng)的字符。
當(dāng)映射不成功時(shí),問(wèn)題就發(fā)生了!當(dāng)從某語(yǔ)言向Unicode轉(zhuǎn)化時(shí),如果在某語(yǔ)言中沒(méi)有該字符,得到的將是Unicode的代碼“\uffffd”(“\u”表示是Unicode編碼,)。而從Unicode向某語(yǔ)言轉(zhuǎn)化時(shí),如果某語(yǔ)言沒(méi)有對(duì)應(yīng)的字符,則得到的是“0x3f”(“?”)。這就是“?”的由來(lái)。
例如:把字符流buf =“0x80 0x40 0xb0 0xa1”進(jìn)行new String(buf, "gb2312")操作,得到的結(jié)果是“\ufffd\u554a”,再println出來(lái),得到的結(jié)果將是“?啊”,因?yàn)?ldquo;0x80 0x40”是GBK中的字符,在GB2312中沒(méi)有。
分享: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)畫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ò)程
。