Кодировка нода base.js base64 дает несколько иные результаты (локально против heroku)

263
Jeremy Ragsdale

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

У меня есть довольно простое приложение, которому нужно base64 кодировать строку.

Код довольно простой код узла

let buff = new Buffer(cics);  let base64data = buff.toString('base64'); 

Вот результаты, они похожи, отличаются только на "YQ =="

Local MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ==  Heroku MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh 

Кто-нибудь знает, что здесь может происходить?

0

1 ответ на вопрос

1
grawity

Ну, расшифруй их и посмотри.

$ echo 'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhY = base64 -d | hexdump -C 00000000 33 34 34 63 30 31 39 63 2d 31 66 61 30 2d 34 38 | 344c019c-1fa0-48 | 00000010 35 34 2d 39 61 32 33 2d 39 63 62 36 66 33 61 37 | 54-9a23-9cb6f3a7 | 00000020 66 33 33 64 3a 39 61 65 38 61 31 65 30 2d 38 36 | f33d: 9ae8a1e0-86 | 00000030 39 62 2d 34 38 36 62 2d 62 37 31 64 2d 64 64 30 | 9b-486b-b71d-dd0 | 00000040 63 35 34 64 37 35 61 61 61 | c54d75aa a | 00000049 
$ echo 'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh | base64 -d | hexdump -C 00000000 33 34 34 63 30 31 39 63 2d 31 66 61 30 2d 34 38 | 344c019c-1fa0-48 | 00000010 35 34 2d 39 61 32 33 2d 39 63 62 36 66 33 61 37 | 54-9a23-9cb6f3a7 | 00000020 66 33 33 64 3a 39 61 65 38 61 31 65 30 2d 38 36 | f33d: 9ae8a1e0-86 | 00000030 39 62 2d 34 38 36 62 2d 62 37 31 64 2d 64 64 30 | 9b-486b-b71d-dd0 | 00000040 63 35 34 64 37 35 61 61 | c54d75aa | 00000048 

Обратите внимание, что Heroku кодирует буфер, который на один байт короче (отсутствует последняя буква a) - или его кодировщик Base64 содержит ошибки и отбрасывает неполные блоки вместо правильного использования заполнения.

(В качестве ярлыка, поскольку вывод Base64 всегда состоит из 4-символьных блоков, вы можете декодировать только сам YQ==по себе. Он действительно декодирует в букву a.)

Ах, ошибки копирования и вставки являются худшими ... Полагаю, если бы я их на самом деле расшифровал, я бы это увидел. Спасибо, что указал на это. Jeremy Ragsdale 5 лет назад 0

Похожие вопросы