Ошибка чтения полной строки, включая встроенные нулевые байты
Скрипт Lua:
i=io.read()
print(i)
Командная строка:
echo -e "sala\x00m" | lua ll.lua
Выход:
sala
Я хочу, чтобы он печатал все символы из ввода, подобно этому:
salam
в HEX-редакторе:
0000000: 7361 6c61 006d 0a sala.m.
Как я могу напечатать все символы из ввода?
1 ответ
Решение
Вы попали в одно из немногих мест, где стандартная библиотека Lua все еще не является 8-битной.
В частности, построчное чтение файла не является доказательством встроенного 0.
Причина, по которой это еще не сделано, заключается в неудачном сочетании:
- Для ядра разрешены только стандартные C90 или одинаково переносимые конструкции, что не обеспечивает эффективного анализа 0-чистого текста.
- Каждое решение, обсуждавшееся на сегодняшний день в списке рассылки в соответствии с этим ограничением, имеет значительные накладные расходы.
- Встроенные 0-байты в текстовые файлы встречаются довольно редко.
обходные:
- Используйте измененную библиотеку, исправляя эти форматы:
"*l"
"*L"
заfile:read(...)
- разбирать ваши необработанные данные самостоятельно. (читать блок, используя число или как можно больше, используя
"*a"
) - Барсук разработчиков Lua / сопровождающих для исправления, пока они не сдаются.