设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

BRAC_TransBufferEx传输数据乱码

[复制链接]

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
跳转到指定楼层
#
发表于 2015-10-15 20:12:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好,咨询个问题,,,我在anychat的web端发送BRAC_TransBufferEx中文数据到服务端,服务端解码String msg = new String(lpBuf, "GBK");可以正常,此时发送给IOS端时,IOS端中文乱码。
此时,我将String msg = new String(lpBuf, "GBK");改为String msg = new String(lpBuf, "UTF-8");后
IOS端anychat发送BRAC_TransBufferEx中文数据到服务端可以正常显示,但是其直接发送到web端中文乱码
这个问题怎么解决?
谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

24#
发表于 2015-10-19 09:26:35 | 只看该作者
淡竹叶 发表于 2015-10-19 08:33
部分代码已贴上,,我们是嵌在app里面的,web端一对多,,只要上线就能与其对话
此时服务端
    public void OnAnyChatTransBufferEx(int dwUserId, byte[] lpBuf, int dwLen, int wParam, int lParam, int dwTaskId) {
        try {
            //保存发送的消息到服务器中
            String msg = new String(lpBuf, "UTF-8");
            String msg2 = new String(lpBuf, "GBK");

msg乱码,而msg2正常。。


您好,这一段说明您的utf-8编码没有成功?您把页面以及js的utf-8统一换成大写或者小写试试看。
前面说的服务器是指web服务器,具体来说是serverlet里面的service中需要指定请求对象的字符集,否则默认都是以8859-1编码,不过您的gbk能成功说明应该不是这个问题。
回复 支持 反对

使用道具 举报

23#
发表于 2015-10-19 09:10:24 | 只看该作者
淡竹叶 发表于 2015-10-19 08:33
部分代码已贴上,,我们是嵌在app里面的,web端一对多,,只要上线就能与其对话

您好,如你1楼所述,ios端你也应该使用 "GBK"编码来处理透明数据,透明通道其实就是一个数据的管道,你在发送端是什么编码,在接收端也需要这样的编码,这样才不会出现乱码。
回复 支持 反对

使用道具 举报

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
22#
 楼主| 发表于 2015-10-19 08:33:50 | 只看该作者
佰锐科技-邵光清 发表于 2015-10-18 22:01
您好,AnyChat SDK不理会使用透明通道扩展传送的数据编码;另外BRAC_TransBufferEx是使用UDP发送数据,不 ...

部分代码已贴上,,我们是嵌在app里面的,web端一对多,,只要上线就能与其对话
回复 支持 反对

使用道具 举报

21#
发表于 2015-10-18 22:01:13 | 只看该作者
本帖最后由 佰锐科技-邵光清 于 2015-10-18 22:08 编辑
淡竹叶 发表于 2015-10-18 21:38
您好,另外,,web端给ios端发送透明扩展通道,这应该是p2p的长链接吧,,和服务器有关系么,和核心服务 ...

您好,AnyChat SDK不理会使用透明通道扩展传送的数据编码;另外BRAC_TransBufferEx是使用UDP发送数据,不保证发送顺序和接收顺序相同,但保证能收到。请问您是什么业务场景需要在房间外使用缓冲区传输数据呢?
回复 支持 反对

使用道具 举报

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
20#
 楼主| 发表于 2015-10-18 21:38:43 | 只看该作者
佰锐科技-李友勤 发表于 2015-10-18 20:07
您好,您的数据是怎样接收的呢?请将相关代码贴上来分析下。
您前面说jsp环境,是不是说您的页面是在部 ...

您好,另外,,web端给ios端发送透明扩展通道,这应该是p2p的长链接吧,,和服务器有关系么,和核心服务有关么,核心服务应该也不会影响传输的字符编码
回复 支持 反对

使用道具 举报

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
19#
 楼主| 发表于 2015-10-18 21:35:12 | 只看该作者
佰锐科技-李友勤 发表于 2015-10-18 20:07
您好,您的数据是怎样接收的呢?请将相关代码贴上来分析下。
您前面说jsp环境,是不是说您的页面是在部 ...

项目部署在tomcat中,在jsp页面上<%@ page language="java" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="${ctx }/js/main.js" charset="UTF-8"></script>
项目中
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这时候mainjs发送文字:
//dwUserId为o表示发送给服务器
        var errorcode = BRAC_TransBufferEx(0,getVal,mTargetUserId,TYPE_TXT,0);
        //发送给用户端
        var errorcode2 = BRAC_TransBufferEx(mTargetUserId,getVal,mTargetUserId,TYPE_TXT,0);

通过BRAC_TransBufferEx(0,,,第一个参数为0发服务端,
此时服务端
    public void OnAnyChatTransBufferEx(int dwUserId, byte[] lpBuf, int dwLen, int wParam, int lParam, int dwTaskId) {
        try {
            //保存发送的消息到服务器中
            String msg = new String(lpBuf, "UTF-8");
            String msg2 = new String(lpBuf, "GBK");

msg乱码,而msg2正常。。
var errorcode2 = BRAC_TransBufferEx(mTargetUserId,getVal,mTargetUserId,TYPE_TXT,0);发给IOS端,那边接收到的二进制转化为字符串(utf-8)也是乱码的
回复 支持 反对

使用道具 举报

18#
发表于 2015-10-18 20:07:31 | 只看该作者
淡竹叶 发表于 2015-10-18 19:56
由于文字聊天API接口BRAC_SendTextMessage需要进入房间操作,而我们的需求是不进入房间能够文字聊天的。

您好,您的数据是怎样接收的呢?请将相关代码贴上来分析下。
您前面说jsp环境,是不是说您的页面是在部署的容器里呢?
如果是这样的话,页面的数据交给服务器,在客户端浏览器以页面指定编码转给服务器以后,目前的服务器开发环境默认都会以8859-1进行解码并响应,这样的话中文字符肯定是不支持,需要在serverlet里面指定接收的编码才能正常的。
回复 支持 反对

使用道具 举报

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
17#
 楼主| 发表于 2015-10-18 19:56:29 | 只看该作者
佰锐科技-邵光清 发表于 2015-10-18 19:52
您好,透明传输通道扩展的回调函数返回的都是缓冲区地址,各个平台都一样的,如果需要在不同平台之间传输 ...

由于文字聊天API接口BRAC_SendTextMessage需要进入房间操作,而我们的需求是不进入房间能够文字聊天的。
回复 支持 反对

使用道具 举报

16#
发表于 2015-10-18 19:52:23 | 只看该作者
淡竹叶 发表于 2015-10-18 19:25
ios端和服务端回调函数都是byte数组,js端的回调函数中是string,,能否告知怎么转换的

您好,透明传输通道扩展的回调函数返回的都是缓冲区地址,各个平台都一样的,如果需要在不同平台之间传输中文字符,最好使用文字聊天API接口BRAC_SendTextMessage
回复 支持 反对

使用道具 举报

6

主题

53

帖子

170

积分

注册会员

Rank: 2

积分
170
15#
 楼主| 发表于 2015-10-18 19:25:04 | 只看该作者
佰锐科技-李友勤 发表于 2015-10-17 16:14
您好,
这里如果用gbk解码,能否正常呢?

ios端和服务端回调函数都是byte数组,js端的回调函数中是string,,能否告知怎么转换的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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