当我通过 loadstring 在 lua 中加载数据时,一些神奇的中文字符会失败。
RawData = '{a="a朶b"}'
Data = loadstring("return " .. RawData)()
那是因为:
- "朵" 的 ascii char(gbk 编码) 为 0x96 0x5c
- 0x5c 是'\',之后会转义所有内容。
- 所以,'{a="a朵b"}'变成 '{a="a\150\b"}',\b 是错误的答案
那么,我永远不会得到正确的输出“a朵b”,“b”被“朵”吃掉......
同样的引用问题发生在 python 中:
exec("""print '''a朶b''' """)
在python中有一些方法可以处理这个问题:
- 明确定义文件中的编码 - - 编码:gbk - -
- 使用 utf-8 进行字符串/文件编码
但是lua只支持标准C,有什么引用或转义的想法吗?
顺便说一句,这有效:
RawData = [=[ {a=[[a朶b]]} ]=]
return loadstring("return " .. RawData)() .a
但我必须更改原始 RawData,这是不可接受的。
问题2:
如何保持lua中的字符串不转义?(python 做得很好)
s = "a朶b"
s1 = string.format("%q", s) -- s escaped
return s -- s escaped
print(s) -- s escaped