[AS3]as3.0中XMLSocket传中文时乱码问题解决方法
socket服务器为java,发送的xml中有中文字符,encoding为gb2312。
as3中用XMLSocket连接socket服务器,添加了监听:xmlSocket.addEventListener(DataEvent.DATA,onMyData);收到数据后调用js函数:function onMyData(event:DataEvent):void { ExternalInterface.call("onData",event.data);}
js中直接显示数据:function onData(data){alert(data);}
在flash中加入System.useCodePage=true,再trace()收到的数据是正常的中文显示,但到js的alert中所有中文字符都变成乱码了。
单独发送带中文字符的xml格式字符串,在js中可以正常显示。
- var xmlstr:String=" <?xml version=\"1.0\" encoding="gb2312"
standalone=\"yes\"?><envelope name=\"登陆\" type=\"request\"></envelope >"- ExternalInterface.call("onData",xmlstr);
试过多种方法未能解决:
1.加入/去掉System.useCodePage=true;
2.对所有双字节字符进行unicode编码。
3.用event.data.toString或event.data.toXMLString,虽然event.data本身就是String型的,我还是试了下。
4.对event.data中的双引号”用\"替换。
5.对event.data进行utf-8转码
无奈中,原因应该是XMLSocket接收和发送数据时,会认为数据都是xml对象,会按encoding对中文编码。
至于到底怎么回事,还没时间研究。
解决方法:
即然是xmlsocket按格式发送和接收数据造成的乱码,那我们用socket就可以了,socket读取和写入的都是原始二进制数据。
下边是两个示例方法:
- function sendData(str:String) {
- var ba:ByteArray =new ByteArray();
- ba.writeMultiByte(str,"gb2312");
- socket.writeBytes(ba);
- socket.flush();
- }
- function onMyData(event:ProgressEvent):void {
- var n:int = socket.bytesAvailable;
- var revmsg:String="";
- while (--n >= 0) {
- var te:String = socket.readMultiByte(socket.bytesAvailable,"Unicode");
- revmsg+=te;
- }
- trace(revmsg);
- ExternalInterface.call("onData",revmsg);
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例