无法读取包含嵌入式零字节的完整行

时间:2014-05-11 22:11:06

标签: file-io input lua

Lua脚本:

i=io.read()
print(i)

命令行:

echo -e "sala\x00m" | lua ll.lua

输出:

sala

我希望它能从输入中打印所有字符,类似于:

salam
在HEX编辑器中

0000000: 7361 6c61 006d 0a                         sala.m.

如何从输入中打印所有字符?

1 个答案:

答案 0 :(得分:4)

你绊倒Lua标准库仍然不是8位清洁的少数几个地方之一 具体来说,逐行文件读取不是嵌入式证明。

它还不是一个令人遗憾的组合:

  • 核心只允许使用标准C90或同等可移植的构造,但不提供高效的0-clean文本解析。
  • 到目前为止,在该约束下的邮件列表中讨论的每个解决方案都有相当大的开销。
  • 文本文件中嵌入的0字节非常罕见。

解决方法:

  • 使用经过修改的库,修复以下格式:"*l" "*L" file:read(...)
  • 自己解析原始数据。 (使用数字或尽可能使用"*a"
  • 读取块
  • 诅咒Lua开发人员/维护人员以获取错误修正,直到他们放弃。