隨筆-17  評(píng)論-6  文章-1  trackbacks-0

          http://www.javaworld.com/javaworld/jw-04-2004/jw-0419-multibytes_p.html

          多字節(jié)字符在J2EE中的處理
          --多字節(jié)字符的J2EE開發(fā)

          摘要
          大多數(shù)J2EE服務(wù)器對(duì)多字節(jié)字符語(yǔ)言(中文和日文)支持的很好,但是不同的J2EE服務(wù)器和瀏覽器支持的方式不同。當(dāng)開發(fā)者從一個(gè)服務(wù)器移植中文應(yīng)用到另一個(gè)時(shí),總是遇到多字節(jié)字符問(wèn)題。在本文里,Wang Yu分析了產(chǎn)生此種問(wèn)題的根本原因,并提供了一些解決方案和指導(dǎo)方針。

          中文是世界上最復(fù)雜、最綜合的語(yǔ)言之一。有時(shí)我很慶幸自己是中國(guó)人,尤其我看到我的外國(guó)朋友為學(xué)好中文特別是寫漢字而奮斗的時(shí)候。但當(dāng)開發(fā)J2EE本地化應(yīng)用,卻無(wú)法慶幸了。本文將告訴你為什么。
          盡管java平臺(tái)和大多數(shù)J2EE服務(wù)器很好的支持國(guó)際化,開發(fā)中文應(yīng)用時(shí)我仍然遇到很多多字節(jié)字符問(wèn)題:
          編碼和字符集之間的區(qū)別是什么?
          為什么多字節(jié)字符應(yīng)用在不同操作系統(tǒng)間有不同的顯示?
          為什么多字節(jié)字符應(yīng)用在不同應(yīng)用服務(wù)器間有不同的顯示?
          為什么多字節(jié)字符應(yīng)用在不同瀏覽器間有不同的顯示?
          為什么大多數(shù)J2EE服務(wù)器不能很好的支持UTF-16(universal transformation format)編碼。
          本文將幫你解答這些疑問(wèn)。

          字符的基礎(chǔ)知識(shí)
          字符在計(jì)算機(jī)發(fā)明之前就已經(jīng)存在了。3000多年以前,甲骨文出現(xiàn)在古代中國(guó)。這些字符有特有的形象和意思,大部分有名字和發(fā)音。所有這些方面構(gòu)成字符集(character repertoire),一組特有語(yǔ)言的截然不同的字符,與計(jì)算機(jī)沒(méi)有一點(diǎn)關(guān)系。過(guò)去的幾千年里,創(chuàng)造出許多種語(yǔ)言和數(shù)千的字符。現(xiàn)在我們?cè)囍鴮⑦@些字符編碼成計(jì)算機(jī)能理解的1和0的串。
          當(dāng)用鍵盤打字時(shí),你涉及字符輸入方法。對(duì)于簡(jiǎn)單字符,存在字符和建碼的一一對(duì)應(yīng)。對(duì)于復(fù)雜語(yǔ)言,一個(gè)字符需要多個(gè)擊鍵。
          當(dāng)你看到屏幕上字符之前,操作系統(tǒng)必須存儲(chǔ)字符在內(nèi)存。實(shí)際上,操作系統(tǒng)定義了字符和非負(fù)整數(shù)的一一對(duì)應(yīng),保存在內(nèi)存中。這些整數(shù)被稱為字符碼(character code)。
          字符能存儲(chǔ)在文件中或通過(guò)網(wǎng)絡(luò)傳輸。字符編碼(character encoding )定義了如何映射一個(gè)字符的字符碼到字節(jié)的序列。一些字符碼映射到單字節(jié),如ASCII,一些映射到多字節(jié),如中文、日文,依賴于不同的字符編碼。
          不同的語(yǔ)言有不同的字符表,每一個(gè)字符表用特有的編碼格式。通常,當(dāng)選擇了語(yǔ)言,就選擇了對(duì)應(yīng)的字符表、編碼格式。比如,選擇中文,默認(rèn)就選擇了GBK中文字符表和GBK編碼格式。
          我避免術(shù)語(yǔ)字符集(character set),因?yàn)樗鼛?lái)混淆,顯然character set和character repertoire是同義詞。Character set被HTTP Mime 頭誤用了,charset被誤用做encoding。
          Java的特性之一是16位的字符,支持Unicode,表示不同語(yǔ)言不同字符的標(biāo)準(zhǔn)方法。不幸的是,這種方法在J2EE開發(fā)中引起許多問(wèn)題。
          導(dǎo)致顯示問(wèn)題的不同開發(fā)階段
          J2EE開發(fā)包括幾個(gè)階段(圖一);每一個(gè)階段都能導(dǎo)致多字節(jié)字符顯示問(wèn)題。
          編碼階段
          編碼時(shí)大多用IDE如JB、NetBeans,或編輯器如UE、vi。不管選擇什么,如果在jsp、java、html文件中有多字節(jié)字符串,如果不小心就會(huì)遇到顯示問(wèn)題。

          posted on 2005-10-18 13:40 小鐵匠 閱讀(370) 評(píng)論(0)  編輯  收藏 所屬分類: java

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 桂林市| 昆山市| 利津县| 兖州市| 汾西县| 利川市| 淄博市| 新津县| 望谟县| 大理市| 抚宁县| 庐江县| 万州区| 英德市| 临沧市| 许昌县| 枣庄市| 巴林右旗| 凤台县| 扎兰屯市| 锦州市| 罗城| 洪江市| 沛县| 云阳县| 沿河| 兴安县| 阿尔山市| 安顺市| 黄骅市| 涟水县| 汉寿县| 金塔县| 繁峙县| 驻马店市| 米林县| 宜川县| 东辽县| 永定县| 金乡县| 广德县|