Ошибка чтения полной строки, включая встроенные нулевые байты

Скрипт 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 / сопровождающих для исправления, пока они не сдаются.
Другие вопросы по тегам