Lua-decodeURI (luvit)
Я хотел бы использовать decodeURI
или decodeURIComponent
как в JavaScript в моем Lua (Luvit) проекте.
JavaScript:
decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
// result: привет
Лувит:
require('querystring').urldecode('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
-- result: '%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'
2 ответа:
Это тривиально сделать самому в Lua, если вы понимаете URI-кодированный формат. Каждая подстрока
%XX
представляет собой данные UTF-8, закодированные с префиксом%
и шестнадцатеричным октетом.local decodeURI do local char, gsub, tonumber = string.char, string.gsub, tonumber local function _(hex) return char(tonumber(hex, 16)) end function decodeURI(s) s = gsub(s, '%%(%x%x)', _) return s end end print(decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'))
Вот еще один дубль. Этот код сэкономит вам много вызовов функций, если вам придется декодировать много строк.
local hex={} for i=0,255 do hex[string.format("%0x",i)]=string.char(i) hex[string.format("%0X",i)]=string.char(i) end local function decodeURI(s) return (s:gsub('%%(%x%x)',hex)) end print(decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'))