🔤 Biblioteca: UTF-8

Trabalhe com texto Unicode e caracteres internacionais!

🌍

O que é UTF-8?

UTF-8 é uma codificação que permite usar caracteres de todos os idiomas do mundo: português (ã, ç), espanhol (ñ), chinês (中文), árabe (العربية), emojis (😀) e muito mais!

Comprimento de Texto UTF-8

-- Contar caracteres UTF-8 (não bytes)
local texto = "Olá! 你好"
local comprimento = utf8.obtenha_comprimento(texto)
exiba(comprimento)  -- 8 caracteres

-- Operador # conta bytes, não caracteres!
exiba(#texto)  -- Mais que 8 (bytes)

-- Verificar intervalo específico
local len = utf8.obtenha_comprimento(texto, 1, 5)
exiba(len)  -- Caracteres entre posições 1 e 5

Pontos de Código (Codepoints)

-- Obter código numérico de caracteres
local codigo = utf8.obtenha_ponto_código("A")
exiba(codigo)  -- 65

-- Múltiplos caracteres
local a, b, c = utf8.obtenha_ponto_código("ABC", 1, 3)
exiba(a, b, c)  -- 65, 66, 67

-- Caracteres especiais
local emoji = utf8.obtenha_ponto_código("😀")
exiba(emoji)  -- 128512

Criar Caracteres UTF-8

-- Criar caractere a partir do código
local char = utf8.crie_caractere(65)
exiba(char)  -- A

-- Criar vários caracteres
local texto = utf8.crie_caractere(72, 101, 108, 108, 111)
exiba(texto)  -- Hello

-- Criar emoji
local emoji = utf8.crie_caractere(128512)
exiba(emoji)  -- 😀

Deslocamento de Bytes

local texto = "Olá mundo"

-- Encontrar início do 3º caractere
local pos = utf8.obtenha_deslocamento(texto, 3)
exiba(pos)  -- Posição em bytes

-- Navegar caracteres
local pos = utf8.obtenha_deslocamento(texto, 1, 1)  -- Próximo caractere
local pos = utf8.obtenha_deslocamento(texto, -1)    -- Caractere anterior

Iterar Sobre Caracteres

local texto = "Sol 太阳 ☀️"

-- Iterar sobre cada caractere
para pos, codigo em utf8.itere_códigos(texto) faça
    local char = utf8.crie_caractere(codigo)
    exiba(pos, codigo, char)
fim

-- Saída:
-- 1    83    S
-- 2    111   o
-- 3    108   l
-- 4    32    (espaço)
-- 5    22826 太
-- ...

Padrão de Caractere UTF-8

-- Padrão para combinar um caractere UTF-8
local padrao = utf8.padrão_caractere

-- Usar em busca de padrões
local texto = "Olá 世界"
para char em texto.combine_globalmente(texto, utf8.padrão_caractere) faça
    exiba(char)
fim

Exemplo: Contador de Caracteres

função analise_texto(texto)
    local total = utf8.obtenha_comprimento(texto)
    local bytes = #texto

    exiba("Texto: " .. texto)
    exiba("Caracteres: " .. total)
    exiba("Bytes: " .. bytes)
    exiba("Média bytes/char: " .. (bytes / total))

    exiba("\nCaracteres individuais:")
    para pos, codigo em utf8.itere_códigos(texto) faça
        local char = utf8.crie_caractere(codigo)
        exiba("  " .. char .. " (código: " .. codigo .. ")")
    fim
fim

analise_texto("Olá! 你好 😀")

Exemplo: Validação UTF-8

função eh_utf8_valido(texto)
    local len, pos = utf8.obtenha_comprimento(texto)

    se len então
        retorne verdadeiro
    fim

    exiba("UTF-8 inválido na posição: " .. pos)
    retorne falso
fim

se eh_utf8_valido("Texto válido 中文") então
    exiba("✅ Texto UTF-8 válido")
fim

Exemplo: Reverter Texto UTF-8

função reverta_utf8(texto)
    local caracteres = {}

    -- Coletar todos os caracteres
    para pos, codigo em utf8.itere_códigos(texto) faça
        tabela.insira(caracteres, utf8.crie_caractere(codigo))
    fim

    -- Reverter a lista
    local revertido = {}
    para i = #caracteres, 1, -1 faça
        tabela.insira(revertido, caracteres[i])
    fim

    retorne tabela.concatene(revertido)
fim

local original = "Olá 世界"
local revertido = reverta_utf8(original)
exiba(original)   -- Olá 世界
exiba(revertido)  -- 界世 álO
Use sempre as funções UTF-8 quando trabalhar com texto internacional. O operador # e funções de texto padrão contam bytes, não caracteres!
A biblioteca UTF-8 permite trabalhar corretamente com texto em qualquer idioma do mundo!
```