Как преобразовать строку в ее реальное двоичное представление (UTF-8 или что-то еще используется в настоящее время)? - PullRequest
1 голос
/ 02 мая 2019

Я хочу поэкспериментировать с UTF-8 и Unicode, для этого я хочу создать небольшой веб-сайт, который поможет мне лучше понять кодировку.

Сначала я хочу ввести текст, а затем получитьфактическое двоичное кодирование строки.Для этого я ищу эквивалент ".GetBytes" из C # или Java.Я не хочу разрешенные CharCodes!

Здесь функция C #, которую я хотел бы воспроизвести в JavaScript

string ToBinary(string input)
{
    //this is the part I am looking for in JavaScript
    var utf8Bytes = Encoding.UTF8.GetBytes(input);

    var bytesFormatedToBin = utf8Bytes.Select(b => Convert.ToString(b, 2).PadLeft(8, '0'));
    return string.Join(' ', bytesFormatedToBin);
}

Вот некоторые примеры результатов:

  • "abc"=>" 01100001 01100010 01100011 "
  • " @ © ® "=>" 01000000 11000010 10101001 11000010 10101110 "
  • " ?? "=>" 11110000 10011111 10011000 10000000 11110000 10011111 10011000 10000100 "

Есть ли способ добиться этого в JavaScript?

Спасибо.Marc

Edit: исправлен усеченный результат выборки.

1 Ответ

3 голосов
/ 02 мая 2019

String.prototype.charCodeAt(...) работает правильно только тогда, когда строка содержит только символы ASCII.Вам придется использовать стандарт TextEncoder, если вы хотите работать с другими символами:

const te = new TextEncoder('utf-8')
function toBinaryRepr(str) {
    return Array.from(te.encode(str))
        .map(i => i
            .toString(2)
            .padStart(8, '0'))
        .join(' ')
}
// '01100001 01100010 01100011'
toBinaryRepr('abc')
// '01000000 11000010 10101001 11000010 10101110'
toBinaryRepr('@©®')
// '11110000 10011111 10011000 10000000 11110000 10011111 10011000 10000100'
toBinaryRepr('??')

Предупреждение: TextEncoder не является глобальным конструктором в старых версиях Node.js - если вы получаетенекоторые ошибки говорят, что TextEncoder не определено, попробуйте импортировать его:

const { TextEncoder } = require('util')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...