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

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

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

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

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

Local
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ==

Heroku
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh

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

1 ответ1

1

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

$ echo 'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ==' | 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 .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .