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

[url]http://bbs.9ria.com/viewthread.php?tid=75393&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D2592000[/url]

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值