熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JSP中的漢字編碼問題

2013-11-15 12:01:30  來源: JSP教程 

  網上就 JSP/Servlet 中 DBCS 字符編碼問題有許多優秀的文章和討論本文對它們作一些整理並結合 IBM WebSphere Application Server (WAS)的解決方法作一些說明希望它不是多余的

  內容

  問題的起源

  GBGBKGB 漢字字符集及 Encoding

  中文轉碼時′?′亂碼的由來

  JSP/Servlet 漢字編碼問題及在 WAS 中的解決辦法

  結束語

  參考文章

   問題的起源

  每個國家(或區域)都規定了計算機信息交換用的字符編碼集如美國的擴展 ASCII碼 中國的 GB日本的 JIS 等作為該國家/區域內信息處理的基礎有著統一編碼的重要作用字符編碼集按長度分為 SBCS(單字節字符集)DBCS(雙字節字符集)兩大類早期的軟件(尤其是操作系統)為了解決本地字符信息的計算機處理出現了各種本地化版本(LN)為了區分引進了 LANG Codepage 等概念但是由於各個本地字符集代碼范圍重疊相互間信息交換困難軟件各個本地化版本獨立維護成本較高因此有必要將本地化工作中的共性抽取出來作一致處理將特別的本地化處理內容降低到最少這也就是所謂的國際化(IN)各種語言信息被進一步規范為 Locale 信息處理的底層字符集變成了幾乎包含了所有字形的 Unicode

  現在大部分具有國際化特征的軟件核心字符處理都是以 Unicode 為基礎的在軟件運行時根據當時的 Locale/Lang/Codepage 設置確定相應的本地字符編碼設置並依此處理本地字符在處理過程中需要實現 Unicode 和本地字符集的相互轉換甚或以 Unicode 為中間的兩個不同本地字符集的相互轉換這種方式在網絡環境下被進一步延伸任何網絡兩端的字符信息也需要根據字符集的設置轉換成可接受的內容

  Java 語言內部是用 Unicode 表示字符的遵守 Unicode VJava 程序無論是從/往文件系統以字符流讀/寫文件還是往 URL 連接寫 HTML 信息或從 URL 連接讀取參數值都會有字符編碼的轉換這樣做雖然增加了編程的復雜度容易引起混淆但卻是符合國際化的思想的

  從理論上來說這些根據字符集設置而進行的字符轉換不應該產生太多問題而事實是由於應用程序的實際運行環境不同Unicode 和各個本地字符集的補充完善以及系統或應用程序實現的不規范轉碼時出現的問題時時困擾著程序員和用戶

   GBGBKGB 漢字字符集及 Encoding

  其實解決 JAVA 程序中的漢字編碼問題的方法往往很簡單但理解其背後的原因定位問題還需要了解現有的漢字編碼和編碼轉換

  GB 是在國內計算機漢字信息技術發展初始階段制定的其中包含了大部分常用的一二級漢字 區的符號該字符集是幾乎所有的中文系統和國際化的軟件都支持的中文字符集這也是最基本的中文字符集其編碼范圍是高位xaxfe低位也是 xaxfe漢字從 xba 開始結束於 xffe

  GBK 是 GB 的擴展是向上兼容的它包含了 個漢字其編碼范圍是 xxfefe剔除高位 x 的字位其所有字符都可以一對一映射到 Unicode 也就是說 JAVA 實際上提供了 GBK 字符集的支持這是現階段 Windows 和其它一些中文操作系統的缺省字符集但並不是所有的國際化軟件都支持該字符集感覺是他們並不完全知道 GBK 是怎麼回事值得注意的是它不是國家標准而只是規范隨著 GB國標的發布它將在不久的將來完成它的歷史使命

  GB(GBKK) 在 GBK 的基礎上進一步擴展了漢字增加了藏蒙等少數民族的字形GBKK 從根本上解決了字位不夠字形不足的問題它有幾個特點

  它並沒有確定所有的字形只是規定了編碼范圍留待以後擴充

  編碼是變長的其二字節部分與 GBK 兼容四字節部分是擴充的字形字位其編碼范圍是首字節 xxfe二字節xx三字節 xxfe四字節xx

  它的推廣是分階段的首先要求實現的是能夠完全映射到 Unicode 標准的所有字形

  它是國家標准是強制性的

  現在還沒有任何一個操作系統或軟件實現了 GBKK 的支持這是現階段和將來漢化的工作內容

  Unicode 的介紹就免了吧

  JAVA 支持的encoding中與中文編程相關的有(有幾個在JDK文檔中未列出)

  ASCII bit 同 ascii


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20104.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.