nodejs下使用socket.io进行前后端通讯时发生乱码。 当前端socket = io.connect();后通过socket.emit(‘message’,{arg:‘中文内容’});这个时候后端收到的数据是正常的,没有乱码现象,但之后页面事件再次发送socket.emit(‘message’,{arg:‘中文内容’});时后端收到的数据就出现乱码:完整代码如下:
前端代码: socket = io.connect(); //第一次发送 socket.emit(‘message’,{arg:‘中文内容’});
//第二次发送 setTimeout(function(){ socket.emit(‘message’,{arg:‘中文内容2’}); }
后端代码: io.sockets.on(‘connection’, function (socket) { socket.on(‘message’, function(arg){ console.log(arg) }) })
两次后端输出代码: 第一次:{arg:‘中文内容’} 第二次:{arg:‘ç«s’}
这是什么情况,为什么socket连接后马上发送是正常的,之后的事件驱动或者延时发送的就乱码?有人遇到过吗?
目测像是数据字节流被截断了。
请问问题解决了吗?我遇到了同样的情况
@haozxuan 请问您有没有比较好的解决办法?
@Hoooxz 听说过,江湖上失传的,零宽断言吗?
@haozxuan 百度了一下,好像说的是正则表达式啊。和这个问题的关系是?
dsfadsf
@haozxuan 好像并不是这个问题啊。
我发送差别很大的中文字符串,比如说: 第一次: 前端发送:socket.emit(‘message’,{arg:‘ABC加载成功’}); 后端收到:ABC加载成功 第二次: 前端发送:socket.emit(‘message’,{arg:‘CNode社区’}); 后端收到:CNode社åº
也就是说,绝对是在编码方面出现了问题。
但是当我把收到的内容直接发回前端, 后端收到后立即发回前端: socket.on(‘message’, function(data){ socket.emit(‘returnMessage’, data); }); 前端收到发回的代码: socket.on(‘returnMessage’, function(data){ alert(data); }); 则当前端发送"CNode社区",后端收到后立即发回前端,前端显示的还是"CNode社区"呢
我这里十分迷惑,所以请大神们解答,谢谢
@Hoooxz 两次前端发送都是utf-8?因为默认情况下不太会出现这个。
这个真是神奇,查下node.js 的文件还有网页文件的保存编码是什么?meta标签的编码又是什么?
你node部署的机器的操作系统的编码方式是什么? 自豪地采用 CNodeJS ionic
说来惭愧,突然发现了问题,竟然是用了不知道多久之前老版本的socket.io客户端文件。 目测是我在研究别人的源码时偷懒直接复制过来用了,好惭愧,困扰了好久好久了的问题。 让大家见笑了,请还在入门的同学们引我为戒!