繁体   English   中英

在浏览器或node.js应用程序中在javascript中反序列化UTF8编码的Byte []?

[英]Deserializing UTF8 encoded Byte[] in javascript in the browser or in the node.js application?

我在c#中有一个事件类:

public class AreaInterventoCreata{
    //public properties
}
var message= new AreaInterventoCreata();

我创建了这个类服务器端的实例。 我的目标是将此创作传达给已订阅此类事件的客户。

因此我将它传递给我的经纪人RabbitMQ以下byte[]

var responseBody = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message))
responseChannel.BasicPublish(
                             "",                 // exchange 
                             properties.ReplyTo, // routingKey
                             responseProperties, // basicProperties 
                             responseBody);      // body

一些node.js服务器订阅了这种消息:

q.subscribe(function (message) { 
    for (var i = 0; i < sockets.length; i++) {
        console.log('_sockets[' + i + '] emitted');
        sockets[i].emit(event, message);
    }
});

这个node.js自己收到了来自浏览器的socket.io连接,因此可以对这些套接字执行推送,例如这些浏览器:

sockets[i].emit(event, message);

最后,我在浏览器中收到此消息:

var socket = io.connect('http://localhost:8091');
socket.on('Events_AreaIntervento_AreaInterventoCreata:Events', function (data) {
    var json = Utf8.decode(data);
});

当我通过firebug检查数据时,它是一个对象数据,其数字数组定义为data.data

我假设这个数字数组是我在进程开始时给出的字节数组。 这个假设我错了吗?

  • 我怎么能处理它,以便我可以使用javascript中的一些普通对象? (找到了!)
  • 我应该直接在node.js服务器级别在json中进行翻译吗? 它效率更高吗? 更多的事情呢?

好的,在这个网站的帮助下找到了它(至少是它的一部分)

var Utf8 = {
    // public method for url decoding
    decodeArray: function (utfArray) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while (i < utfArray.length) {

            c = utfArray[i];

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if ((c > 191) && (c < 224)) {
                c2 = utfArray[i + 1];
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utfArray[i + 1];
                c3 = utfArray[i + 2];
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }
        return string;
    }
}

像这样使用

<script>
    var socket = io.connect('http://localhost:8091');
    socket.on('Events_AreaIntervento_AreaInterventoCreata:Events', function (msg) {
        var jsonString = Utf8.decodeArray(msg.data);
        alert(jsonString);
    });
</script>

但我仍然想知道在客户端或node.js服务器上执行此操作是否更好,以及如何在node.js服务器上执行此操作?

我之前从未使用过RabbitMQ,但看起来你将JSON字符串从.NET传递给RabbitMQ的方式有问题。 您的“responseProperties”可能不正确,因为在nodejs或客户端上使用JSON之前,您不需要解码UTF-8阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM