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