UTF-8
Lua utiliza a biblioteca UTF8
para lidar com caracteres especiais. Funções como reverse
, upper
e lower
não funcionam corretamente para strings em UTF-8
. Além disso, outras funções podem apresentar um comportamento inesperado.
utf8.len("melão") -- 5string.len("melão") -- 6string.upper("melão") -- MELãO
Podemos utilizar utf8.offset
, que converte a posição do caractere para o índice em bytes correto, garantindo que a operação de substring funcione como o esperado.
local utf8 = require 'utf8'local s = "melão"
local result1 = string.sub(s, 5) -- 6local result2 = string.sub(s, utf8.offset(s, 5)) -- 5
print(result1)print(result2)
A função utf8.codes
permite-nos percorrer os caracteres de uma string UTF8
.
local utf8 = require 'utf8'
for _, byte in utf8.codes(utf_string) do local caractere = utf8.char(byte) print(string.format("byte: %d, caractere: %s", byte, caractere))end