-- convert numeric html entities to utf8
-- converts from stdin to stdout
-- example: € -> €
local char = string.char
local function tail(n, k)
local u, r=''
for i=1,k do
n,r = math.floor(n/0x40), n%0x40
u = char(r+0x80) .. u
end
return u, n
end
local function to_utf8(a)
local n, r, u = tonumber(a)
if n<0x80 then -- 1 byte
return char(n)
elseif n<0x800 then -- 2 byte
u, n = tail(n, 1)
return char(n+0xc0) .. u
elseif n<0x10000 then -- 3 byte
u, n = tail(n, 2)
return char(n+0xe0) .. u
elseif n<0x200000 then -- 4 byte
u, n = tail(n, 3)
return char(n+0xf0) .. u
elseif n<0x4000000 then -- 5 byte
u, n = tail(n, 4)
return char(n+0xf8) .. u
else -- 6 byte
u, n = tail(n, 5)
return char(n+0xfc) .. u
end
end
for line in io.lines() do
out = string.gsub(line, '&#(%d+);', to_utf8)
print(out)
end
lua 转 utf8编码
最新推荐文章于 2024-05-23 10:03:55 发布