[url]http://bbs.9ria.com/viewthread.php?tid=75393&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D2592000[/url]
json解码后的汉字都是这种 “\u5f20\u4e09” 类型,如何将其显示出来呢?
弄过一个将 \uxxx\wxxx的字符串转换为中文字符的,几个方法如下(从文件中口出来的,可能需要做点小修改)
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);
}