隨筆-17  評論-6  文章-1  trackbacks-0

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

          多字節字符在J2EE中的處理
          --多字節字符的J2EE開發

          摘要
          大多數J2EE服務器對多字節字符語言(中文和日文)支持的很好,但是不同的J2EE服務器和瀏覽器支持的方式不同。當開發者從一個服務器移植中文應用到另一個時,總是遇到多字節字符問題。在本文里,Wang Yu分析了產生此種問題的根本原因,并提供了一些解決方案和指導方針。

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

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

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 桑日县| 武鸣县| 宣化县| 永济市| 聊城市| 英德市| 仁怀市| 康保县| 阿鲁科尔沁旗| 汉沽区| 伊春市| 枣阳市| 噶尔县| 郸城县| 乐清市| 图木舒克市| 南川市| 西平县| 静乐县| 盐池县| 邵阳市| 花莲市| 嘉黎县| 丰镇市| 桂阳县| 山阳县| 东至县| 威信县| 上虞市| 若尔盖县| 东阳市| 临沂市| 图木舒克市| 无棣县| 桐梓县| 津市市| 大田县| 田林县| 鄂州市| 日照市| 北宁市|