Socket.io: 数据字符串通过套接字更改

创建于 2017-11-30  ·  5评论  ·  资料来源: socketio/socket.io

注意:对于支持问题,请使用以下渠道之一: stackoverflowslack

你想要:

  • [x] 报告错误
  • [ ] 请求功能

当前行为

当将对象作为数据发出并在其中使用字符串(或 unicode \u2265 )时,它会将其转换为字符串字母e变成d

重现步骤(如果当前行为是错误)

客户端

channel.emit('data', {data:'≥'});

服务器端

socket.on('data',({data:bla})=>{
console.log(bla); // prints 'e'
});

注意:获得快速答案的最佳方法是提供一个失败的测试用例,例如通过分叉以下小提琴

预期行为

数据将始终保持不变

设置

  • 操作系统:Windows
  • 浏览器:Chrome 62
  • socket.io 版本:1.7.2

其他信息(例如堆栈跟踪、相关问题、如何修复的建议)

最有用的评论

用 2.0.4 试过了,还是会发生...
通过使用以下代码对数据进行编码和解码来修复它:
客户端

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

服务器端

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

所有5条评论

仅当套接字未通过 xhr 升级(首次使用)时才会发生这种情况,
升级到 websocket 后,所有数据都正确发送

见 #451 和 #572

1.x 版的 utf8 解析有问题,你可以试试 2.x 版吗?

有关的:

用 2.0.4 试过了,还是会发生...
通过使用以下代码对数据进行编码和解码来修复它:
客户端

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

服务器端

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

是的,这似乎奏效了。 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级