设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5370|回复: 4
打印 上一主题 下一主题

android端使用透明函数发送消息,c#端接收乱码问题

[复制链接]

8

主题

26

帖子

100

积分

注册会员

Rank: 2

积分
100
跳转到指定楼层
楼主
发表于 2013-11-25 13:55:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我在使用透明通道api发送中文数据的时候,android发送,c#端接收乱码。请问这是怎么回事,如何解决呢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
沙发
发表于 2013-11-25 14:00:05 | 只看该作者
您好。透明通道函数只是提供一个数据通道,需要上层客户端提供统一的编码方式。是不是您android端和c#端采用的编码和解码的格式不一样呢?
回复 支持 反对

使用道具 举报

8

主题

26

帖子

100

积分

注册会员

Rank: 2

积分
100
板凳
 楼主| 发表于 2013-11-25 14:39:02 | 只看该作者
廖斌 发表于 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);
复制代码
帮忙看下,谢谢
回复 支持 反对

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
地板
发表于 2013-11-25 14:43:44 | 只看该作者
本帖最后由 廖斌 于 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);
复制代码
回复 支持 反对

使用道具 举报

8

主题

26

帖子

100

积分

注册会员

Rank: 2

积分
100
5#
 楼主| 发表于 2013-11-25 14:48:54 | 只看该作者
廖斌 发表于 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了。谢谢指导
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-11-23 19:53 , Processed in 0.135373 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表