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

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

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

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

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

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

Local
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ==

Heroku
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh

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

1 ответ

Решение

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

$ echo 'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NW'HQ= 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 | c54d75aaa|
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.)

Другие вопросы по тегам