包含双引号和/或单引号的字符串的 Lua 问题 - string.format("%q") 后缀为 \13

问题描述

在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$","")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...