改变Flex的中文编码方式

2015-03-13

最近在和后台服务端交互数据的时候遇到一个问题,客户端和服务端编码方式不一致,导致传到后端的中文是乱码,或者从后端传到前端的中文是乱码,这个分开说明吧。

一、后端传到前端的中文乱码

客户端向服务端POST一个请求,服务端返回了一段数据,数据里包含中文,在客户端获取这段数据时,中文那部分全是乱码,怎么办?这个好办。

不管你用什么方式和后端交互,在向后端发送数据之前,添加一行代码:

flash.system.System.useCodePage = true;

然后通过监听ResultEvent.RESULT事件得到后端发回来的数据,这时候你会发现中文不再是乱码了,当然,处理完数据后记得把useCodePage的值调回false:

flash.system.System.useCodePage = false;

二、前端传到后端的中文乱码

这个问题就要好好说说了,但是我也没法好好说说,因为捣鼓了半天,实在不知道Flex默认是以什么编码发送中文数据的,所以我们在发送数据之前得把数据进行转码再发送到后端:

//编码
public static function encodeToUrl(string:String, charSet:String):String
{
	var result:String ="";

	var bytes:ByteArray = new ByteArray();
	bytes.writeMultiByte(string, charSet);
	for (var i:uint; i<bytes.length; i++) {
		result += escape(String.fromCharCode(bytes[i]));
	}

	return result;
}

//解码
public static function decodeToUrl(string:String, charSet:String):String
{
	var result:String = "";  

	string = unescape(string);
	var bytes:ByteArray = new ByteArray();
	for (var i:uint; i<string.length; i++) {
		bytes[i] = string.charCodeAt(i);
	}
	result = bytes.readMultiByte(bytes.length, "GBK");

	return result;
}

以上是进行编码和进行解码的函数,如果想把“中文编码”四个字进行GBK编码怎么办?简单:

decodeToUrl("中文编码", "GBK");

这样就行了。编码过的字符串传到后台,后台只要以对应的编码进行解码,就不会显示乱码了。 关于FLex支持的字符集,请点击查阅。 你肯定还有一个疑问,这个escape()和unescape()又是什么东西?这个是用URL编码格式进行编码和解码,那么这个又是什么东西?这个就不是今天要讨论的主要内容啦,如果你想知道,可以Google搜索“URL编码格式”进行扩展阅读。

noBorder

除非另有声明,本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

文章评论



章节列表