笨笨的思想片斷

          零碎片斷,雜七雜八。
          posts - 25, comments - 79, trackbacks - 0, articles - 0

          JDK 1.5 對超大字符集的支持

          Posted on 2005-12-09 11:27 笨笨 閱讀(3591) 評論(2)  編輯  收藏 所屬分類: Java

          JDK 1.5 對超大字符集的支持

          Unicode 與超大字符集
          國標 GB18030 規定了4字節擴展部分,這部分區域目前在 Unicode 規范中作為CJK Ext B區存在,即常說的中文超大字符集。這部分區域編碼為 \U20000 - \U2A6D6。

           

          UTF-16與Java String/Character 對象
          一個完整的 Unicode 字符叫 代碼點/CodePoint,而一個 Java char 叫 代碼單元 code unit。
          String 對象以UTF-16保存 Unicode 字符,需要用2個字符表示一個 超大字符集的漢字,這這種表示方式稱之為 Surrogate,第一個字符叫 Surrogate High,第二個就是 Surrogate Low。

          判斷一個char是否是 Surrogate 區的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。
          從兩個Surrogate High/Low 字符,返回一個完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。

          一個 Code Point ,可能需要一個也可能需要兩個char表示,因此不能直接使用 CharSequence.length()方法直接返回一個字符串到底有多少個漢字,而需要用String.codePointCount()/Character.codePointCount()。

          要定位字符串中的第N個字符,不能直接將 N 作為偏移量,而需要從字符串頭部依次遍歷得到,需要用String/Character.offsetByCodePoints() 方法。

          從字符串的當前字符,找到上一個字符,也不能直接用offset -- 實現,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints()

          從當前字符,找下一個字符,不能直接用 offset ++ 實現,需要判斷當前 CodePoint 的長度后,再計算得到,或用 String/Character.offsetByCodePoints() 。


          Swing 對 超大字符集的支持
          JTextPane增加了對 超大字符集的支持,只要設置字體正確,就可以顯示和編輯超大字符集。

          Feedback

          # re: JDK 1.5 對超大字符集的支持  回復  更多評論   

          2007-03-19 00:22 by 扇影丹青
          請問怎么才能讓我的eclipse的editor和console顯示unicode增補字符?
          好像就只能顯示到0xffff
          之后的都是問號
          謝謝!

          # re: JDK 1.5 對超大字符集的支持  回復  更多評論   

          2007-03-19 13:41 by 笨笨
          似乎要在 Eclipse 設置中將相關的顯示字體設置為“宋體-超大字符集”,可以試一試。
          主站蜘蛛池模板: 赞皇县| 巴中市| 日喀则市| 靖州| 梁山县| 浑源县| 怀柔区| 锡林郭勒盟| 江油市| 海门市| 曲阳县| 清镇市| 会理县| 苏州市| 固原市| 嘉鱼县| 多伦县| 施甸县| 凌海市| 安化县| 洛南县| 二连浩特市| 德格县| 喀什市| 沁源县| 四平市| 弋阳县| 郧西县| 绵竹市| 年辖:市辖区| 绩溪县| 宿州市| 瑞金市| 宁津县| 壤塘县| 义马市| 获嘉县| 襄汾县| 永靖县| 石棉县| 杭锦旗|