簡體   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