Descrição Overview Descripción
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.
Reversing text seems trivial until you drop an emoji in the middle of a sentence. Characters that look simple on screen are often represented by more than one code unit: surrogate pairs for code points above U+FFFF, combining sequences for diacritics, and emoji modifier sequences turn what looks like a single character on screen into a cluster of bytes that, naively reversed, becomes unreadable garbage.
Mirror writing has a long history. Leonardo da Vinci wrote his notebooks entirely right to left, possibly to protect his notes from casual readers or simply because he was left-handed. Boustrophedon script, used in archaic Greek inscriptions, alternated writing direction on each line like an ox plowing a field — the name comes from exactly that image. Palindromes exist in virtually every language: racecar and a man a plan a canal Panama are classic English examples.
In development contexts, reversing text has real uses: debugging string algorithms, demonstrating that a parser is direction-agnostic, generating mirrored placeholders for RTL layout tests (right-to-left scripts like Arabic and Hebrew), and performing parity checks in text processing. For actual RTL scripts, Unicode provides the Bidirectional Algorithm, which automatically determines display direction — simply reversing the characters does not produce the same effect.
This tool offers two modes: reverse the entire block so the last character becomes the first, or reverse each line independently. Internally, reversal is performed over code points, which handles surrogate pairs correctly in most cases.
Invertir texto parece trivial hasta que metes un emoji en medio de la frase. Los caracteres que parecen simples en pantalla a menudo están representados por más de una unidad de código: pares sustitutos para puntos de código superiores a U+FFFF, secuencias de combinación para diacríticos y las secuencias de modificadores de emoji convierten lo que parece un único carácter en pantalla en un grupo de bytes que, invertido de forma ingenua, se convierte en basura ilegible.
La escritura especular tiene una larga historia. Leonardo da Vinci escribía sus cuadernos completamente de derecha a izquierda, posiblemente para proteger sus notas de lectores ocasionales o simplemente porque era zurdo. El texto bustrofedón, usado en inscripciones griegas arcaicas, alternaba la dirección de escritura en cada línea como un buey arando el campo; el nombre viene precisamente de esa imagen. Los palíndromos existen en prácticamente todos los idiomas: reconocer y yo soy son ejemplos del español.
En contextos de desarrollo, invertir texto tiene usos reales: depurar algoritmos de cadenas, demostrar que un parser no depende de la dirección, generar marcadores de posición especulares para pruebas de RTL (escritura de derecha a izquierda, como el árabe y el hebreo) y hacer verificaciones de paridad en el procesamiento de texto. Para scripts RTL reales, Unicode dispone del Algoritmo Bidireccional, que determina automáticamente la dirección de visualización; simplemente invertir los caracteres no produce el mismo efecto.
Esta herramienta ofrece dos modos: invertir el bloque entero de forma que el último carácter pase a ser el primero, o invertir cada línea de forma independiente. Internamente, la inversión se realiza sobre los puntos de código, lo que maneja correctamente los pares sustitutos en la mayoría de los 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.
Technical deep dive
Unicode and the illusion of a simple character
- An emoji like 👨👩👧 can be formed by four separate code points joined by Zero Width Joiners — reversing byte by byte completely destroys the sequence.
- Accented letters can be represented as a single code point (NFC form) or as a base letter plus a combining diacritic (NFD form). Naive reversal produces different results depending on the normalization form of the input.
- Surrogate pairs encode code points above U+FFFF using two 16-bit values in UTF-16. Reversing by 16-bit unit without handling these pairs produces invalid sequences.
- The correct approach is to iterate over code points, not code units. In modern JavaScript, the spread operator [...str] and Array.from(str) already iterate over code points.
Real-world use cases
- RTL layout testing: designers working with Arabic or Hebrew frequently need mirrored text to check how an interface handles bidirectional content.
- String algorithms: classic technical interview problems like palindrome checking, anagram detection, and subsequence matching rely on reversing or comparing reversed strings.
- Simple obfuscation: reversal is the most primitive substitution cipher. It offers no real security, but it is useful for educational exercises.
- Generating mirrored domain names and identifiers for testing systems that should be agnostic to text direction.
- Entertainment and culture: hidden messages in songs, joke texts, and typographic logos frequently use reversal as a visual device.
Detalle técnico
Unicode y la ilusión del carácter simple
- Un emoji como 👨👩👧 puede estar formado por cuatro puntos de código separados unidos por Zero Width Joiners; invertir byte a byte destruye completamente la secuencia.
- Las letras acentuadas pueden representarse como un único punto de código (forma NFC) o como una letra base más un diacrítico combinante (forma NFD). La inversión ingenua produce resultados distintos según la forma de normalización del texto de entrada.
- Los pares sustitutos codifican puntos de código superiores a U+FFFF usando dos valores de 16 bits en UTF-16. Invertir por unidad de 16 bits sin tratar esos pares produce secuencias inválidas.
- El enfoque correcto es iterar sobre puntos de código, no sobre unidades de código. En JavaScript moderno, el operador de expansión [...str] y Array.from(str) ya iteran sobre puntos de código.
Casos de uso reales
- Pruebas de maquetación RTL: los diseñadores que trabajan con árabe o hebreo suelen necesitar texto especular para comprobar cómo se comporta la interfaz con contenido bidireccional.
- Algoritmos de cadenas: problemas clásicos de entrevistas técnicas como la verificación de palíndromos, la detección de anagramas y la búsqueda de subsecuencias dependen de invertir o comparar cadenas invertidas.
- Ofuscación simple: la inversión es el cifrado de sustitución más primitivo. No ofrece seguridad real, pero es útil para ejercicios didácticos.
- Generación de nombres de dominio e identificadores especulares para probar sistemas que deben ser agnósticos a la dirección del texto.
- Entretenimiento y cultura: mensajes ocultos en canciones, textos de broma y logotipos tipográficos usan habitualmente la inversión como recurso visual.
Guia da ferramenta Tool guide Guía de la herramienta
-
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.
-
What you are working with A Unicode string (may include emoji).
-
What the tool does Reverses character order for the whole block or, in another mode, each line separately.
-
Why use it Tests, toys, trivial obfuscation, exercises, or checking Unicode handling.
-
Con qué trabajas Una cadena Unicode (puede incluir emoji).
-
Qué hace la herramienta Invierte el orden de caracteres del bloque completo o, en otro modo, cada línea por separado.
-
Por qué usarla Pruebas, juegos, ofuscación trivial, ejercicios o comprobar el manejo de Unicode.
Exemplo de Código Code Snippets Fragmentos de Código
// 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
function reverseLines(text) {
return text
.split('\n')
.map(line => [...line].reverse().join(''))
.join('\n');
}
// Iterates over code points, not code units
function reverseText(str) {
return [...str].reverse().join('');
}
console.log(reverseText('hello')); // olleh
console.log(reverseText('Hello 👋')); // 👋 olleH
function reverseLines(text) {
return text
.split('\n')
.map(line => [...line].reverse().join(''))
.join('\n');
}
// Itera sobre code points, no code units
function reverseText(str) {
return [...str].reverse().join('');
}
console.log(reverseText('hola')); // aloh
console.log(reverseText('Hola 👋')); // 👋 aloH
function reverseLines(text) {
return text
.split('\n')
.map(line => [...line].reverse().join(''))
.join('\n');
}
Exemplo Sample Ejemplo
Hello → olleH
Perguntas frequentes FAQ Preguntas frecuentes
Para que serve esta ferramenta?
What is this tool for?
¿Para qué sirve esta herramienta?
Ela roda 100% no seu navegador: útil para validar, formatar ou converter dados no dia a dia de desenvolvimento.
It runs fully in your browser: useful to validate, format, or convert data in everyday development.
Funciona por completo en tu navegador: sirve para validar, formatear o convertir datos en el día a día.
Meus dados são enviados a algum servidor?
Are my inputs sent to a server?
¿Se envían mis datos a algún servidor?
O processamento é feito localmente via JavaScript. Não armazenamos o conteúdo que você cola nas caixas de texto.
Processing happens locally with JavaScript. We do not store what you paste into the text areas.
El procesamiento es local con JavaScript. No almacenamos lo que pegas en los campos de texto.
Posso usar em produção ou para dados reais?
Can I use this for real production data?
¿Puedo usarlo con datos reales en producción?
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.
Use at your own risk. For secrets (passwords, tokens), prefer controlled environments and your company policies. And always review the generated contents. Never trust blindly things you see on the internet.
Úsalo bajo tu responsabilidad. Para secretos (contraseñas, tokens), prefiere entornos controlados y políticas internas. Recuerda de revisar los contenidos generados. Nunca confies ciegamente en cosas que ves en internet.