loadstringによってluaにデータをロードすると、一部の魔法の中国語文字が失敗します。
RawData = '{a="a朶b"}'
Data = loadstring("return " .. RawData)()
それは理由です:
- "朶"のASCII文字(gbkエンコーディング)は0x960x5cです
- 0x5cは'\'であり、後ですべてをエスケープします。
- したがって、'{a="a朶b"}'は '{a= "a \ 150 \ b"}'になり、\bは間違った答えです
そうすると、正しい出力「a朶b」が得られなくなり、「b」は「朶」に食べられてしまいます…。
同じ引用の問題がPythonで発生します:
exec("""print '''a朶b''' """)
Pythonでこれを処理する方法はいくつかあります。
- ファイル内のエンコーディングを明確に定義します--coding :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