JSON串中的中文字符编码显示问题

时间:2021-12-18 19:12:44

一般来说,服务器端传回来的JSON串中的中文默认字符编码格式为UNICODE格式,形式如下所示:

\\u00e5\\u00bf\\u00ab\\u00e7\\u0082\\u00b9\\u00e5\\u0090\\u00a7,\\u00e7

\\u00ad\\u0089\\u00e5\\u0088\\u00b0\\u00e8\\u008a\\u00b1\\u00e5\\u0084

\\u00bf\\u00e9\\u0083\\u00bd\\u00e8\\u00b0\\u00a2\\u00e4\\u00ba\\u0086

值得注意的是,这里并不是直接可以使用的UNICODE串,因为前边不是一个\而是\\,这样的结果就是\\u00e5并不是一个BYTE而是一个长度为6的字符串(\\被转义识别成一个字符了).似乎没有什么直接的办法去转义了.于是只有自己动手写一个间接的转换方法.

首先是计算出直接的那个字节的值.我们使用下边的这个方法去运算

public static function transfromUnicodeString(str:String):String{   return str.replace(/\\\u([\dabcdef]{4})/ig,   function(){        return   String.fromCharCode(Number("0x"+arguments[1]))   });}通过这个方法,我们可以得到一个单字节的字符.这样我们就相当于原本长度为6的字符串还原成了单个字符.接下来,因为这是散放着的,我们得把它拼接成中文字符.在UNICODE编辑中,中文字符是三个字节长度.不过这些我们不去关心.直接使用上边的方法public static function transfromJsonString(str:String):String{    var b:ByteArray=new ByteArray();    b.writeMultiByte(str,"iso-8859-1");    b.position=0;    return b.readMultiByte(b.bytesAvailable,"utf-8");}OK.两个方法结合起来使用,就得到最终正常显示的中文JSON串了!