utf-8 lua bytearray unpack

utf 8 - Cómo convertir matrices de bytes UTF8 a string en lua



utf-8 bytearray (2)

Lua no proporciona una función directa para convertir una tabla de bytes utf-8 en forma numérica en un literal de cadena utf-8. Pero es bastante fácil escribir algo para esto con la ayuda de string.char :

function utf8_from(t) local bytearr = {} for _, v in ipairs(t) do local utf8byte = v < 0 and (0xff + v + 1) or v table.insert(bytearr, string.char(utf8byte)) end return table.concat(bytearr) end

Tenga en cuenta que ninguna de las funciones estándar de lua ni las facilidades de cadenas provistas son conscientes de utf-8. Si intenta print cadena codificada en utf-8 devuelta por la función anterior, verá algunos símbolos funky. Si necesita una mayor compatibilidad con utf-8, querrá consultar algunas de las bibliotecas mencionadas en la wiki de lua .

Tengo una mesa como esta

table = {57,55,0,15,-25,139,130,-23,173,148,-24,136,158}

es utf8 byte array codificado por la función php unpack

unpack(''C*'',$str);

¿Cómo puedo convertirlo en una cuerda utf-8 que puedo leer en lua?


Aquí hay una solución completa que funciona para el conjunto de caracteres UTF-8 restringido por RFC 3629:

do local bytemarkers = { {0x7FF,192}, {0xFFFF,224}, {0x1FFFFF,240} } function utf8(decimal) if decimal<128 then return string.char(decimal) end local charbytes = {} for bytes,vals in ipairs(bytemarkers) do if decimal<=vals[1] then for b=bytes+1,2,-1 do local mod = decimal%64 decimal = (decimal-mod)/64 charbytes[b] = string.char(128+mod) end charbytes[1] = string.char(vals[2]+decimal) break end end return table.concat(charbytes) end end function utf8frompoints(...) local chars,arg={},{...} for i,n in ipairs(arg) do chars[i]=utf8(arg[i]) end return table.concat(chars) end print(utf8frompoints(72, 233, 108, 108, 246, 32, 8364, 8212)) --> Héllö €—