未能读取包括嵌入的零字节在内的完整行。

Lua 脚本:

i = io.read("*a")
print(i)

命令行:

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

输出:

salam

我希望它打印出输入中的所有字符,类似于这样:

salam

在十六进制编辑器中:

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

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

点赞
用户3204551
用户3204551

你碰到了 Lua 标准库还未完全支持 8 位清洁度的例外情况之一。

具体来说,按行读取文件不能处理嵌入 null 字符。

原因是:

  • 仅允许使用标准 C90 或等效可移植结构体作为核心,这并不提供高效的 0-清洁文本解析。
  • 在此限制条件下讨论的每个解决方案都存在相当大的开销。
  • 文本文件中嵌入的 null 字节非常罕见。

解决方法:

  • 使用修改过的库,修复这些格式:"*l" "*L" 用于 file:read(...)
  • 自己解析原始数据(使用数字读取块或使用 "*a" 尽可能多地读取)
  • 不停地向 Lua 开发人员/维护人员施压,直到他们修复为止。
2014-05-11 23:06:53