问题描述
在lua中, 我正在阅读一个文本文件,其中的行可能包含单引号或双引号,例如: “习惯性开始 comme un fil de soie et devient vite un câble d'acier” - Proverbe espagnol
这些行是这样使用的:
local cmd = 'zenity --question --no-wrap --title "pause" --text ' .. string.format("%q",quote)
print (cmd)
local retVal = os.execute(cmd)
一切正常,但在字符串的最后,字符 \13 是字符串的后缀,这是我不想要的。
zenity --question --no-wrap --title "pause" --text "L'habitude commence comme un fil de soie et devient vite un câble d'acier. - Proverbe espagnol\13"
zenity 窗口显示这个 \13 个字符。
如何解决这个问题?
谢谢
相关: How to add double quote characters to a string?
解决方法
您的报价包含回车符。回车符不是可打印的字符。 Lua 应该如何引用不可打印的字符?
来自Lua 5.4 Reference Manual: string.format
说明符 q 以某种方式格式化布尔值、nil、数字和字符串 结果是 Lua 源代码中的有效常量。布尔值和 nil 以明显的方式书写(true、false、nil)。浮动是 以十六进制编写,以保持完整精度。一个字符串是 写在双引号之间,必要时使用转义序列 以确保它可以被 Lua 解释器安全地读回。为了 例如,调用
string.format('%q','a string with "quotes" and \n new line')
可能产生字符串:
"a string with \"quotes\" and \
new line"
如果您不希望它在字符串中以 \13
结尾,请将其删除。
您可以使用 string.sub
删除它。最好使用 string.gsub
删除多个回车。
或者使用 string.format('"%s"',quote)
或 string.format("\"%s\"",quote)
。还有更多方法可以在字符串中写入双引号。
您的原始文本以 \13
结尾,这是一个 CR。用
quote = quote:sub(quote,1,-2)
如果字符串可能不以 CR 结尾,则将其删除(如果存在)
quote = quote:gsub("\13$","")