[Rakbot] openUrl urlencode кириллица

BlastSrack

Известный
Автор темы
18
3
Форматирование кода
Версия MoonLoader
Другое
Приходит все кроме кириллицы. Я так понял, что надо кириллицу привести к такому виду %D1%82%D0%B5%D1%81%D1%82(тест).
Как это сделать на lua


Lua:
local char_to_hex = function(c)
  return string.format("%%%02X", string.byte(c))
end

local function urlencode(url)
  if url == nil then
    return
  end
  url = url:gsub("\n", "\r\n")
  url = url:gsub("([^%w _%%%-%.~])", char_to_hex)
  url = url:gsub(" ", "+")
  return url
end



openUrl('https://s.ru/?s=фвфыфывфывфыв')
 
Последнее редактирование:

Rei

Известный
Друг
1,590
1,621
Всунь куда-нибудь в конец код из спойлера
Lua:
local ansi_decode={
    [128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
    [134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
    [140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
    [146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
    [152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
    [158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
    [164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
    [170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
    [176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
    [182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
    [188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}

function AnsiToUtf8(s)
    local r, b = ''
    for i = 1, s and s:len() or 0 do
        b = s:byte(i)
        if b < 128 then
            r = r..string.char(b)
        else
            if b > 239 then
                r = r..'\209'..string.char(b - 112)
            elseif b > 191 then
                r = r..'\208'..string.char(b - 48)
            elseif ansi_decode[b] then
                r = r..ansi_decode[b]
            else
                r = r..'_'
            end
        end
    end
    return r
end

Lua:
openUrl(AnsiToUtf8('твоя урла'))

Спиздил, если не ошибаюсь, из бота /beg
 
  • Нравится
Реакции: BlastSrack

BlastSrack

Известный
Автор темы
18
3
Всунь куда-нибудь в конец код из спойлера
Lua:
local ansi_decode={
    [128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
    [134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
    [140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
    [146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
    [152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
    [158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
    [164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
    [170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
    [176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
    [182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
    [188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}

function AnsiToUtf8(s)
    local r, b = ''
    for i = 1, s and s:len() or 0 do
        b = s:byte(i)
        if b < 128 then
            r = r..string.char(b)
        else
            if b > 239 then
                r = r..'\209'..string.char(b - 112)
            elseif b > 191 then
                r = r..'\208'..string.char(b - 48)
            elseif ansi_decode[b] then
                r = r..ansi_decode[b]
            else
                r = r..'_'
            end
        end
    end
    return r
end

Lua:
openUrl(AnsiToUtf8('твоя урла'))

Спиздил, если не ошибаюсь, из бота /beg
там с пробелом текст не отправляется почему-то и emoji от вк вообще не отправляется (&#127930; ).