Как закодировать байты в utf8 в lua?

Строка, которая распаковывается zlib и печатается в журнале, имеет следующий формат.

 {\x22uid\x22:\x22CE57134D17B57E873D7E7434E0E21783\x22.............2\x5Cu0000\x5Cu0000\x22,\x22http://tgs.7477.com/adiframe/ky/01/index.html\x5Cu0000\x5Cu0000\x22,\x22http://s.csbew.com/acookie.html\x5Cu0000\x5Cu0000\x22],\x22ver\x22:\x221\x22}\x0A200

Как закодировать распакованную строку так, чтобы она отображалась без чего-то вроде «\ xxx \ u000» в lua?


person xunyulin    schedule 05.07.2017    source источник
comment
Непонятно, что вы имеете в виду под нормальным видом. Также неясно, что означает этот кусок текста.   -  person Nicol Bolas    schedule 05.07.2017
comment
Это уже выглядит вполне нормально, только знак двойных кавычек экранирован как \x22. Полный текст будет "uid:CE57134D17B57E873D7E7434E0E21783". Этот шестнадцатеричный код не требует дальнейшего декодирования, потому что это какой-то уникальный идентификатор.   -  person Vlad    schedule 05.07.2017
comment
Я повторно редактирую вопрос, надеюсь, на этот раз он прояснит ситуацию.   -  person xunyulin    schedule 06.07.2017


Ответы (1)


Попробуйте эту функцию unescape, чтобы получить символы из шестнадцатеричного представления:

    function unescape (s)
        s = string.gsub(s or '', "\\x(%x%x)", function (h) return string.char(tonumber(h,16)) end)
        return s
    end


    local str = [[{\x22uid\x22:\x22CE57134D17B57E873D7E7434E0E21783\x22.............2\x5Cu0000\x5Cu0000\x22,\x22http://tgs.7477.com/adiframe/ky/01/index.html\x5Cu0000\x5Cu0000\x22,\x22http://s.csbew.com/acookie.html\x5Cu0000\x5Cu0000\x22],\x22ver\x22:\x221\x22}\x0A200 ]]
    print( unescape(str) )

Результат:

 {"uid":"CE57134D17B57E873D7E7434E0E21783".............2\u0000\u0000","http://tgs.7477.com/adiframe/ky/01/index.html\u0000\u0000","http://s.csbew.com/acookie.html\u0000\u0000"],"ver":"1"}
200 
person Mike V.    schedule 05.07.2017