• 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();
        }
    

      

     

  • 相关阅读:
    財智V6.0(完美破解序列号特别版)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    HDU1006
    HDU 1385 Minimum Transport Cost 最短路径题解
    fast-json.jar的用法
    curl命令具体解释
    mysql很全的和完整的总结
    MongoDB入门简单介绍
    Tuxedo入门学习
    BP神经网络基本原理
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/11445771.html
Copyright © 2020-2023  润新知