AnyChat技术支持论坛

标题: android端使用透明函数发送消息,c#端接收乱码问题 [打印本页]

作者: guangxian2012    时间: 2013-11-25 13:55
标题: android端使用透明函数发送消息,c#端接收乱码问题
如题,我在使用透明通道api发送中文数据的时候,android发送,c#端接收乱码。请问这是怎么回事,如何解决呢

作者: 廖斌    时间: 2013-11-25 14:00
您好。透明通道函数只是提供一个数据通道,需要上层客户端提供统一的编码方式。是不是您android端和c#端采用的编码和解码的格式不一样呢?
作者: guangxian2012    时间: 2013-11-25 14:39
廖斌 发表于 2013-11-25 14:00
您好。透明通道函数只是提供一个数据通道,需要上层客户端提供统一的编码方式。是不是您android端和c#端采 ...

哦,我的android发送这样的,
  1. String str = "测试";
  2.                 byte[] data = null;
  3.                 try {
  4.                         data = str.getBytes("UTF8");
  5.                         Log.i("ANYCHAT", "TRANSBUFFERSEND:"+str);
  6.                 }
  7.                catch (UnsupportedEncodingException e) {

  8.                         // TODO Auto-generated catch block
  9.                         e.printStackTrace();
  10.                         }
  11.                 anychat.TransBuffer(-16, data, data.length);
复制代码
c#端接收是这样处理的
  1. private void Received_TransBuffer(int userId, IntPtr buf, int len, int userValue)
  2. {
  3.             string m_Command =             Marshal.PtrToStringAnsi(IntPtr);
  4.             MessageBox.Show(m_Command);
复制代码
帮忙看下,谢谢
作者: 廖斌    时间: 2013-11-25 14:43
本帖最后由 廖斌 于 2013-11-25 14:45 编辑
guangxian2012 发表于 2013-11-25 14:39
哦,我的android发送这样的,c#端接收是这样处理的帮忙看下,谢谢

你的android采用的是UTF8编码格式发送,c#的解析却是默认的GB2312格式解析,这样是不对,需要发送端和接收端采用统一的编码格式。下面提供两种比较常见的编码格式在anychat透明通道函数中的处理,请参考:
1、GB2312编码格式
android端发送代码:
  1.                        String str = "透明通道测试";
  2.                         byte[] data = null;
  3.                         try {
  4.                                 data = str.getBytes("GB2312");
  5.                                 Log.i("ANYCHAT", "TRANSBUFFERSEND:"+str);
  6.                         } catch (UnsupportedEncodingException e) {
  7.                                 // TODO Auto-generated catch block
  8.                                 e.printStackTrace();
  9.                         }
  10.                         anychat.TransBuffer(-16, data, data.length);
复制代码
android端接收:
  1.             try {
  2.                         String str=new String(lpBuf, "GB2312");
  3.                         Log.i("ANYCHAT", "OnAnyChatTransBuffer:"+str);
  4.                 } catch (UnsupportedEncodingException e) {
  5.                         // TODO Auto-generated catch block
  6.                         e.printStackTrace();
  7.                 }
复制代码
c#端发送:
  1.             byte[] buffesr = Encoding.Default.GetBytes("透明通道测试");
  2.             AnyChatCoreSDK.TransBuffer(userId, buffesr, buffesr.Length);
复制代码
c#端接收
  1. private void Received_TransBuffer(int userId, IntPtr buf, int len, int userValue)
  2. {
  3.             string m_Command = Marshal.PtrToStringAnsi(IntPtr);
  4.             MessageBox.Show(m_Command);
复制代码
2、UTF8编码格式
android端发送代码:
  1.                       String str = "透明通道测试";
  2.                         byte[] data = null;
  3.                         try {
  4.                                 data =                 str.getBytes("UTF8");
  5.                                 Log.i("ANYCHAT", "TRANSBUFFERSEND:"+str);
  6.                         } catch (UnsupportedEncodingException e) {
  7.                                 // TODO Auto-generated catch block
  8.                                 e.printStackTrace();
  9.                         }
  10.                         anychat.TransBuffer(-15, data, data.length);
复制代码
android端接收代码:
  1. public void OnAnyChatTransBuffer(int dwUserid, byte[] lpBuf, int dwLen) {        
  2.           try {
  3.                         String str=new String(lpBuf, "UTF8");
  4.                         Log.i("ANYCHAT", "OnAnyChatTransBuffer:"+str);
  5.                 } catch (UnsupportedEncodingException e) {
  6.                         // TODO Auto-generated catch block
  7.                         e.printStackTrace();
  8.                 }
复制代码
c#端发送代码:
  1.             byte[] buffesr = Encoding.UTF8.GetBytes("透明通道测试");
  2.             AnyChatCoreSDK.TransBuffer(userId, buffesr, buffesr.Length);
复制代码
c#端接收代码
  1. private void Received_TransBuffer(int userId, IntPtr buf, int len, int userValue)
  2.         {
  3.             byte[] DATAS = new byte[len];
  4.             Marshal.Copy(buf, DATAS, 0, len);
  5.             string m_Command = Encoding.UTF8.GetString(DATAS);
复制代码

作者: guangxian2012    时间: 2013-11-25 14:48
廖斌 发表于 2013-11-25 14:43
你的android采用的是UTF8编码格式发送,c#的解析却是默认的GB2312格式解析,这样是不对,需要发送端和接 ...

我刚才试了一下,c#端接收改成
  1.   byte[] DATAS = new byte[len];

  2.            Marshal.Copy(buf, DATAS, 0, len);

  3.            string m_Command = Encoding.UTF8.GetString(DATAS);
复制代码
就ok了。谢谢指导




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3