Проблемы раскодирования base64 (появляются пустые строки) Lua (LuaLaTeX)
Я хочу использовать Lua для хранения pdf в теле документа LuaLaTeX и его извлечения при компиляции документа.
Для кодирования документа использую https://base64.guru/ или
утилитой Windows certutil -encodehex -f test.txt enc.txt 0x40000001
Таким образом файл выгружается из документа LuaLaTeX:
\directlua{%
io.output("base64.tex");
io.write((mime.unb64("U3RyaW5nLTENClN0cmluZy0y")));}
Исходный файл состоит из 2-х строчек:
String-1
String-2
После раскодирования получаю 3 строки (появляется пустая строка)
String-1
String-2
Аналогично и с файлом pdf. Его размер увеличивается после кодирования/декодирования.
Я нашел документацию: https://w3.impa.br/~diego/software/luasocket/mime.html#unb64 но не могу разобраться. Мне кажется проблема в что при это из-за \r\n последовательности при декодировании, это окончание строки в стиле Windows.
Текст работает только этим кодером https://appdevtools.com/base64-encoder-decoder
U3RyaW5nLTEKU3RyaW5nLTI= - это рабочий вариант
U3RyaW5nLTENClN0cmluZy0y - это не рабочий (такой у всех кодеров на выходе!)
certutil -encodehex -f test.txt enc.txt 0x80000001 (Use \n line terminators instead of \r\n) - Это вариант тоже не работает
Помогите сделать, чтобы работало.
Заранее спасибо.
Ответы (2 шт):
Кодер base64 ни при чём - что ты подал на вход, то и будет на выходе
Будет ли выбрано CR или CRLF - зависит от текстового редактора (или от того компонента, который генерирует или показывает текст)
После раскодирования просто сам руками замени CRLF на LF
io.write((mime.unb64("U3RyaW5nLTENClN0cmluZy0y"):gsub("\r\n", "\n")));
Так все работает:
\directlua{%
local file = io.open("base64.txt", "wb");
file:write((mime.unb64("U3RyaW5nLTENClN0cmluZy0y")));
file:close();
}