Inverter texto

Inverter o texto inteiro ou caractere a caractere em cada linha (Unicode).

Descrição

Inverter texto é uma operação que parece trivial até que você coloca um emoji no meio da frase. Caracteres que parecem simples na tela frequentemente são representados por mais de uma unidade de código: pares substitutos para pontos de código acima de U+FFFF, sequências de combinação para diacríticos e as sequências de modificadores de emoji transformam o que parece um único caractere na tela em um aglomerado de bytes que, invertido de forma ingênua, vira lixo ilegível.

A escrita espelhada tem uma história longa. Leonardo da Vinci escrevia seus diários inteiramente da direita para a esquerda, possivelmente para proteger suas anotações de leitores casuais ou simplesmente porque era canhoto. O texto boustrofêdon, usado em inscrições gregas arcaicas, alternava a direção de escrita em cada linha, como um boi lavrando o campo — o nome vem exatamente dessa imagem. Palíndromos existem em praticamente todos os idiomas: arara e Roma me tem amor são clássicos do português.

Em contextos de desenvolvimento, reverter texto tem usos reais: depurar algoritmos de string, demonstrar que um parser não é sensível à direção, gerar placeholders espelhados para testes de RTL (escrita da direita para a esquerda, como árabe e hebraico) e fazer verificações de paridade em processamento de texto. Para scripts RTL de verdade, o Unicode dispõe do Algoritmo Bidirecional, que determina automaticamente a direção de exibição — simplesmente inverter os caracteres não produz o mesmo efeito.

Esta ferramenta oferece dois modos: inverter o bloco inteiro para que o último caractere vire o primeiro, ou inverter cada linha de forma independente. Internamente, a inversão é feita sobre os pontos de código, o que lida corretamente com pares substitutos na maioria dos casos.

Detalhamento técnico

Unicode e a ilusão do caractere simples

  • Um emoji como 👨‍👩‍👧 pode ser formado por quatro pontos de código separados unidos por Zero Width Joiners — inverter byte a byte destrói completamente a sequência.
  • Letras acentuadas do português podem ser representadas como um único ponto de código (forma NFC) ou como uma letra base mais um diacrítico combinante (forma NFD). A inversão ingênua produz resultados diferentes dependendo da forma de normalização do texto de entrada.
  • Pares substitutos (surrogate pairs) codificam pontos de código acima de U+FFFF usando dois valores de 16 bits em UTF-16. Inverter por unidade de 16 bits sem tratar esses pares resulta em sequências inválidas.
  • A abordagem correta é iterar por pontos de código (code points), não por unidades de código (code units). Em JavaScript moderno, o operador de espalhamento [...str] e Array.from(str) já iteram por pontos de código.

Casos de uso reais

  • Testes de layout RTL: designers que trabalham com árabe ou hebraico frequentemente precisam de texto espelhado para verificar como a interface se comporta com conteúdo bidirecional.
  • Algoritmos de string: problemas clássicos de entrevista técnica como verificação de palíndromos, anagramas e subsequências dependem de inverter ou comparar strings invertidas.
  • Criptografia simples e ofuscação: a cifra de substituição mais primitiva é a inversão. Não oferece segurança real, mas serve para exercícios didáticos.
  • Geração de nomes de domínio e identificadores espelhados para testes de sistemas que devem ser agnósticos à direção do texto.
  • Entretenimento e cultura: mensagens de fundo em músicas, textos de brincadeira e logos tipográficos frequentemente usam reversão como recurso visual.

Guia da ferramenta

  • O objeto tratado String Unicode (pode incluir emojis).

  • O que a ferramenta faz Inverte a ordem dos caracteres no bloco inteiro ou, em outro modo, inverte cada linha separadamente.

  • Por que usar Testes, brinquedos, ofuscação trivial, exercícios ou verificação de manipulação de Unicode.

Exemplo de Código

Inversão correta por pontos de código em JavaScript
// Itera por code points, não code units
function reverseText(str) {
  return [...str].reverse().join('');
}

console.log(reverseText('olá'));      // álо
console.log(reverseText('Hello 👋')); // 👋 olleH
Inversão linha a linha
function reverseLines(text) {
  return text
    .split('\n')
    .map(line => [...line].reverse().join(''))
    .join('\n');
}

Exemplo

Hello → olleH

Perguntas frequentes

Para que serve esta ferramenta?

Ela roda 100% no seu navegador: útil para validar, formatar ou converter dados no dia a dia de desenvolvimento.

Meus dados são enviados a algum servidor?

O processamento é feito localmente via JavaScript. Não armazenamos o conteúdo que você cola nas caixas de texto.

Posso usar em produção ou para dados reais?

Use por sua conta e risco. Para segredos (senhas, tokens), prefira ambientes controlados e políticas da sua empresa. E lembre sempre de revisar os conteúdos gerados. Nunca confie cegamente nas coisas que vê na internet.