收藏
回答

关于sendSocketMessage发送到服务端的乱码问题

问题模块
API和组件

调用的是同一个方法,但在服务端有时候就会收到乱码,有时候正常。但是就是因为乱码问题,导致解析json会解析不出来,进而导致服务端程序的一些处理逻辑出现问题,这是什么原因呢?

正常的数据:


不正常的数据:


小程序代码:


最后一次编辑于  2017-11-17  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • 彭享
    彭享
    2017-11-17

    我谨慎怀疑是不是sendSocketMessage内部没有对这些数据对象本身进行初始化,才导致json格式的字符串后面跟随了一堆不知所云的乱码?

    快来人啊。。。。这个坑很要命啊。

    我在浏览器上用javascript模拟websocket发送数据都是没有问题的。所以肯定不是服务端的问题。

    2017-11-17
    赞同
    回复
  • 贞重
    贞重
    2017-11-17

    你们是做什么的


    2017-11-17
    赞同
    回复
  • 彭享
    彭享
    2017-11-20

    做一个有关麻将计分和排名的小程序,在计算胡牌过程中需要其他玩家确认,所以要用到websocket。玩牌的场景是线下的,胡牌的计算是通过小程序,而且有一套很复杂的规则

    2017-11-20
    赞同
    回复
  • 贞重
    贞重
    2017-11-20

    是否跟你发送的数据编码有关系?

    2017-11-20
    赞同
    回复
  • ~淮右布衣~
    ~淮右布衣~
    2017-12-14

    1楼的问题解决了吗?

    我也遇到类似问题,再贴一次:


    在使用websocket发送jason数据时,打印的日志中jason数据是完整的。但服务器收到的jason数据在最后几个字节却是乱码导致解析失败。用JMeter压测工具测试服务器发送同样的数据一致运行良好。不知是不是微信小程序的websocket实现在发送用户数据的时候进行了什么过滤或编码?

    微信小程序端:

    wx.sendSocketMessage({

    data:msg

    });

    console.log('msg sent: ' + msg);//这里的信息是正常的

    显示:{"TerminalType":2,"TerminalId":0,"TimeStamp":0,"RequestedTerminalId":1,"DataType":1}


    服务器端(使用了rapidjson1.1.0):

    服务器开始的时候正常,收几个包后就异常,接收的数据长度是对的,但信息却成了:

    pay_load:{"TerminalType":2,"TerminalId":0,"TimeStamp":0,"RequestedTerminalId":1Bm▒D.▒\*▒_2


    2017-12-14
    赞同
    回复