读书人

[转] As3 怎么显示出 “\u5f20\u4e09”

发布时间: 2012-12-20 09:53:21 作者: rapoo

[转] 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);                }

读书人网 >编程

热点推荐