`

[转] As3 如何显示出 “\u5f20\u4e09” 这种编码的汉字?

阅读更多
http://bbs.9ria.com/viewthread.php?tid=75393&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D2592000

json解码后的汉字都是这种 “\u5f20\u4e09” 类型,如何将其显示出来呢?



弄过一个将 \uxxx\wxxx的字符串转换为中文字符的,几个方法如下(从文件中口出来的,可能需要做点小修改)
             // 主要方法
               protected static function getEscapeString(str:String):String
                {
                        //TODO::
                        str = str.replace(/\\n/g,"\n");
                        str = str.replace(/\\u\w{4}/g,_str_rp);
                        return str;
                }
                /**
                 * Unicode 转义过程……
                 * */
                protected static function _str_rp():String
                {
                        var s:String = arguments[0];
                        s = s.replace("\\u","0x");        
                        var n:Number = Number(s);
                        s = LocaleUtil.getUnicodeChar(n);  // 方法见下帖
                        return s;
                }



 /**
                 *Unicode编码(16进制)       UTF-8 字节流(二进制)
                 * 2字节 16Bit                最大3字节 24Bit
     0000 - 007F         0xxxxxxx
     0080 - 07FF         110xxxxx 10xxxxxx
     0800 - FFFF         1110xxxx 10xxxxxx 10xxxxxx  
* 例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,
* 所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。
* 将6C49写成二进制是:0110 110001 001001, 
* 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
                 */
                public static function getUnicodeChar(u:uint):String
                {
                        var b:ByteArray=new ByteArray();
                        var u1:uint;
                        var u2:uint;
                        var u3:uint;
                        
                        if(u<=0x007F)
                        {
                                b.writeByte(u);
                        }
                        else
                        if(u<=0x07FF)
                        {
                                u1 = (u & 0x3F) + 0x80;
                                u = u>>6;                  
                                u2 = (u & 0x3F) + 0xC0;                
                                b.writeByte(u2);
                                b.writeByte(u1);  
                        }
                        else
                        {
                                u1 = u & 0x3F ;
                                u1 += 0x80                  // 0011 1111
                                u = u>>6;
                                u2 = u & 0x3F;
                                u2 +=0x80;                        // 0001 1111
                                u = u>>6;
                                u3 = u & 0x0F;
                                u3 += 0xE0;                        // 0000 1111
                                
                                b.writeByte(u3);
                                b.writeByte(u2);
                                b.writeByte(u1);    
                        }
                        b.position = 0;
                        return b.readUTFBytes(b.length);
                }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics