2016-10-13 00:16:48 点击量:26 标签: 收藏本文
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);
- }
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室