Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Помощь по скриптам для PtokaX _ Перекодировка в скрипте Lua 5.14 из CP-1251 в UTF-8

Автор: ILYA INDIGO 12.12.2011, 1:43

Имеем сервер случайных баш-приколов http://mydc.ru/r/?http://bash.org.ru/random
К сожалению, имеем его только в кодировке CP-1251.
Имеем мой тестовый хаб на PtokaX 0.4.2.0 на GNU/Linux openSUSE 12.1 x86_64, работающий в кодировке UTF-8.
Имеем lua-script AnekBot v1.0 beta by alex82 (Если знаете новее или лучше ткните мне в него ссылкой big_smile.gif )
Имеем парсирующую функцию

Код
tParse[funcnumber] = function(data)
    local _,_,result = string.find(data,"<div class=\"text\">(.-)</div>")
    return result or "На http://bash.org.ru/random изменилась структура web-документа!"
end

Нужно перед return, перекодировать result в UTF-8.
1 Как это сделать? Я слышал что это как то делается с помощью таблицы преобразования, но как именно я не понял.
2 Возможно ли это сделать какой-нибудь lua-библиотекой?
3 Возможно ли это сделать обращаясь к средствам Linux?

Автор: Артём 12.12.2011, 2:05

http://mydc.ru/topic334.html может и не в тему, но мало ли big_smile.gif

Автор: Saymon21 12.12.2011, 2:09

берём, то, что дал Артём и примерно так

Код
result = AnsiToUtf8(result)
return result -- дальше сам.


Цитата
3 Возможно ли это сделать обращаясь к средствам Linux?

iconv

Автор: ILYA INDIGO 12.12.2011, 2:46

Раскрывающийся текст
Код
tParse[funcnumber] = function(data)
    local cp1251=
    {
        [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'
    }
    local nmdc =
    {
        [36] = '$',
        [124] = '|'
    }
    cp1251_utf8 = function(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 cp1251[b] then
                r = r..cp1251[b]
            else
                r = r..'_'
            end
        end
        end
        return r
    end
    local _,_,result = string.find(data,"<div class=\"text\">(.-)</div>")
    return cp1251_utf8(result) or "На http://bash.org.ru/random изменилась структура web-документа!"
end

Спасибо помогло! big_smile.gif)