zoukankan      html  css  js  c++  java
  • Unicode原理和互转中文

    代码点
    Unicode标准的本意很简单:希望给世界上每一种文字系统的每一个字符,都分配一个唯一的整数,这些整数叫做代码点(Code Points)。

    代码空间
    所有的代码点构成一个代码空间(Code Space),根据Unicode定义,总共有1,114,112个代码点,编号从0x0到0x10FFFF。换句话说,如果每个代码点都能够代表一个有效字符的话,Unicode标准最多能够编码1,114,112,也就是大概110多万个字符。最新的Unicode标准(7.0)已经给超过11万个字符分配了代码点。

    代码平面
    Unicode标准把代码点分成了17个代码平面(Code Plane),编号为#0到#16。
    每个代码平面包含65,536(2^16)个代码点(17*65,536=1,114,112)。
    其中,Plane#0叫做基本多语言平面(Basic Multilingual Plane,BMP),其余平面叫做补充平面(Supplementary Planes)。
    Unicode7.0只使用了17个平面中的6个,并且给这6个平面起了名字,如下

    public String getChineseByunicode(String sunicode) {
    
            char a;
            int len = sunicode.length();
            StringBuffer outBuffer = new StringBuffer(len);
            for (int b = 0; b < len; ) {
                a = sunicode.charAt(b++);
                if (a == '\') {
                    a = sunicode.charAt(b++);
                    if (a == 'u') {
                        int value = 0;
                        for (int i = 0; i < 4; i++) {
                            a = sunicode.charAt(b++);
                            switch (a) {
                                case '0':
                                case '1':
                                case '2':
                                case '3':
                                case '4':
                                case '5':
                                case '6':
                                case '7':
                                case '8':
                                case '9':
                                    value = (value << 4) + a - '0';
                                    break;
                                case 'a':
                                case 'b':
                                case 'c':
                                case 'd':
                                case 'e':
                                case 'f':
                                    value = (value << 4) + 10 + a - 'a';
                                     break;
                                case 'A':
                                case 'B':
                                case 'C':
                                case 'D':
                                case 'E':
                                case 'F':
                                    value = (value << 4) + 10 + a - 'A';
                                            break;
                                default:
                                    throw new IllegalArgumentException(
                                            "Malformed   \uxxxx  encoding.");
    
                            }
                        }
                        outBuffer.append((char) value);
                    } else {
                        if (a == 't') a = '	';
                        else if (a == 'r') a = '
    ';
                        else if (a == 'n') a = '
    ';
                        else if (a == 'f') a = 'f';
                        outBuffer.append(a);
                    }
                } else outBuffer.append(a);
            }
            return outBuffer.toString();
        }
    

      

     

  • 相关阅读:
    一个帖子掌握android所有控件、ProgressBar 、Android 动画效果、SQLite、四大组件、Android多媒体(转
    Android开发交流群
    我的程序里 《我的歌声里》程序员版
    《老罗Android开发视频教程安卓巴士》(Android 开发)
    #百度360大战# 我为什么要支持360
    安卓巴士移动开发者周刊第九期
    水杯题的非常好的解释
    [LeetCode] Jump Game
    [LeetCode] Longest Common Prefix
    [CareerCup][Google Interview] 寻找动态的中位数
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/11445771.html
Copyright © 2011-2022 走看看