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

      

     

  • 相关阅读:
    Jquery.validate.js表单验证插件的使用
    UEditor编辑文章出现多余空行问题的解决办法
    jQuery问题:$XXX is not a function
    PHP+memcache扩展(集成环境wampserver环境下)
    Provider 错误 '80004005' 未指定的错误 /conn.asp,行 23
    PHP+MD5
    Mysql(Mariadb) 基础操作语句 (持续更新)
    什么是存储引擎以及不同存储引擎特点
    微信网页授权(OAuth2.0) PHP 源码简单实现
    字符集和字符集编码详解
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/11445771.html
Copyright © 2011-2022 走看看