Проблема кодировки буфера в Node.js - PullRequest
4 голосов
/ 02 августа 2011

У меня проблемы с пониманием кодировки символов в node.js.Я передаю данные, и по какой-то причине кодировка приводит к замене некоторых символов другими.То, что я делаю, - это кодирование base 64 на стороне клиента и декодирование его в node.js.

Для упрощения я сузил его до следующего фрагмента кода, который завершается ошибкой:

new Buffer("1w==", 'base64').toString('utf8');

1w== - это кодировка base 64 символа ×.Теперь при передаче этой строки с аргументом 'base64' в буфер и последующем выполнении .toString('utf8') я ожидал получить тот же символ обратно, но не сделал этого.Вместо этого я получил (код символа 65533).

Кодировка utf8 неверна?Если так, что я должен использовать вместо этого?Если нет, как я могу декодировать строку base 64 в node.js?

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

Нет, ваше предположение неверно. Строка в кодировке base64, очевидно, имеет только один байт. И для всех кодовых точек Unicode выше U + 007F для кодирования в UTF-8 требуются как минимум два байта.

Я все еще плохо разбираюсь в base64, но вместо этого попробую ISO-8859-1.

Дело в том, что декодирование base64 преобразует строку символов в строку байтов. Вы предполагали, что он декодируется в строку символов, но это неправильно. Вам все еще нужно кодировать строку байтов в строку символов, и в вашем случае правильная кодировка - ISO-8859-1.

0 голосов
/ 05 апреля 2016
echo -n x | base64

дает

eA==

Данный код даст ожидаемый ответ, если кодировка была правильной. Проблема скорее всего на стороне кодирования. (1w == переводит в байт 0xD7, который будет началом многобайтового символа UTF-8)

...