Javascript C # Unicode Strings - headscratcher - PullRequest
0 голосов
/ 16 февраля 2012

Если я преобразую Bytearray в Javascript в строку, используя следующий метод:

convertByteArrayToString: function(byteArray)
{
    var s = '';
    for(var i = 0;i < byteArray.length;i++)
            {
                    s += String.fromCharCode(byteArray[i])
            }
    return s;
},

Как мне затем преобразовать эту строку обратно в байтовый массив в C #?

У меня естьпробовал все три из следующих:

 System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding().GetBytes(myString);
 System.Text.UTF32Encoding encoding = new System.Text.UTF32Encoding().GetBytes(myString);
 System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding().GetBytes(myString);

Самый близкий - первый, но он возвращает массив байтов, который удваивает длину оригинала, при этом каждый второй элемент в массиве равен 0, а иногда и невернозначение или два.

Насколько мне известно, String.fromCharCode работает в Юникоде, так как заставить его взаимодействовать с C #?

Это сводит меня с ума!

Редактировать:

Вот пример,

Исходный байтовый массив: [139, 104, 166, 35, 8, 42, 216, 160, 235, 153, 23, 143, 105, 3, 24, 255]

Моя функция преобразует это в: "h¦ # * Ø ëiÿ"

В C # при попытке декодировать эту строку в байтовый массив получается следующееРезультаты:

Использование System.Text.UnicodeEncoding дает: [142,0,139,0,104,0,166,0,35,0,8,0,42,0,216,0,32,0,235,0,153,0,23,0,143,0,105,0,30,24,0,255,0]

1 Ответ

2 голосов
/ 16 февраля 2012

crypto-js имеет Crypto.charenc.UTF8.stringToBytes() и Crypto.charenc.UTF8.bytesToString(), которые прекрасно работают с кодировкой UTF-8 в C #.

Редактировать

После обсуждения выясняется, что ОП хочет перенести byte[] из JS в C # - это лучше сделать с помощью кодировки base64 (я рекомендую тот же инструментарий JS)

...