·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0中XMLSocket传中文时乱码问题解决方法

时间:2012-09-07 13:56CuPlayer
socket服务器为java,发送的xml中有中文字符,encoding为gb2312,as3中用XMLSocket连接socket服务器,添加了监听:xmlSocket.addEventListener(DataEvent.DATA,onMyData)

  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中可以正常显示。

  1. var xmlstr:String=" <?xml version=\"1.0\" encoding="gb2312" 

    standalone=\"yes\"?><envelope name=\"登陆\" type=\"request\"></envelope >"  
  2. 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读取和写入的都是原始二进制数据。

  下边是两个示例方法:

  1. function sendData(str:String) {  
  2. var ba:ByteArray =new ByteArray();  
  3. ba.writeMultiByte(str,"gb2312");  
  4. socket.writeBytes(ba);  
  5. socket.flush();  

 

  1. function onMyData(event:ProgressEvent):void {  
  2. var n:int = socket.bytesAvailable;  
  3. var revmsg:String="";  
  4. while (--n >= 0) {  
  5. var te:String = socket.readMultiByte(socket.bytesAvailable,"Unicode");  
  6. revmsg+=te;  
  7. }  
  8. trace(revmsg);  
  9. ExternalInterface.call("onData",revmsg);  

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器