我有这个旧代码片段,(显然)将经过双重编码的UTF-8文本解码回普通的UTF-8:
# Run with python3!
import codecs
import sys
s=codecs.open('doubleutf8.dat', 'r', 'utf-8').read()
sys.stdout.write(
s
.encode('raw_unicode_escape')
.decode('utf-8')
)
我需要将其翻译为Lua,并模仿所有可能的解码副作用(如果有)。
局限性:我可以使用任何可用的Lua模块进行UTF-8处理,但最好使用稳定的模块,并带有LuaRocks支持。我不会使用Lupa或其他Lua-Python桥接解决方案,也不会调用os.execute()
来调用Python。
您可以使用lua-iconv,将Lua绑定到iconv library。有了它,您可以根据需要在字符编码之间进行尽可能多的转换。
在LuaRocks中也可用。
Edit:使用this answer,我已经能够使用以下Lua代码正确解码数据:
require 'iconv'
-- convert from utf8 to latin1
local decoder = iconv.new('latin1', 'utf8')
local data = io.open('doubleutf8.dat'):read('*a')
-- decodedData is encoded in utf8
local decodedData = decoder:iconv(data)
-- if your terminal understands utf8, prints "нижний новгород"
-- if not, you can further convert it from utf8 to any encoding, like KOI8-R
print(decodedData)