nodejs的net模块获取到数据转成json后,取得的值怎么是乱码?如何解决,求大神!
发布于 12 年前 作者 438041502 9417 次浏览 最后一次编辑是 8 年前
socket.on('data', function(data){
	if(data.toString()=='<policy-file-request/>\0'){
		socket.end(XML);
		console.log('客户端flash已与服务器建立连接,可以正常传输数据了!');			
	}else{
		sockets.push(socket);
		console.log(sockets.length);
		getdata = JSON.parse(data);
		console.log(getdata.login);
		socket.write(getdata.login);
	}		
});
5 回复

转成UTF-8 看看。

如果没有调用socket.setEncoding();,回调中拿到的data就是一个Buffer对象,Buffer直接toString()的话,默认编码是utf-8,所以乱码的话可能是客户端传输的编码不是utf-8

另外一个问题是,你从socket读数据的方式不对,TCP是面向字节流的,data事件触发的时候,你未必就能一次拿到全部json数据(它可能被切成一段一段的发过来,尤其是网络不好的情况下),一般的处理方式有两种:对端先发送数据长度,然后这别先读到长度,这样把后面的数据都buffer起来,直到读够了指定长度的数据,这时你才能确定这段数据传完了。另一种方式是:采用特定的分隔符号,比如用\r\n分隔每段json数据,这样也是先buffer,然后每读到一个\r\n就知道一段完整的json收到了。

再有一个问题是,node.jsv0.10中stream有一些变化,如果你在用新版本的话,建议使用新的API:

socket.on('readable', function () {
    var data = socket.read();
});

thanks,已解决

太感谢了,解决了大问题!

回到顶部