Invertir texto

Invierte todo el bloque o cada línea carácter a carácter (Unicode).

Descripción

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.

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.

Guía de la herramienta

  • 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.

Fragmentos de Código

Inversión correcta por puntos de código en JavaScript
// Itera sobre code points, no code units
function reverseText(str) {
  return [...str].reverse().join('');
}

console.log(reverseText('hola'));     // aloh
console.log(reverseText('Hola 👋')); // 👋 aloH
Inversión línea a línea
function reverseLines(text) {
  return text
    .split('\n')
    .map(line => [...line].reverse().join(''))
    .join('\n');
}

Ejemplo

Hello → olleH

Preguntas frecuentes

¿Para qué sirve esta herramienta?

Funciona por completo en tu navegador: sirve para validar, formatear o convertir datos en el día a día.

¿Se envían mis datos a algún servidor?

El procesamiento es local con JavaScript. No almacenamos lo que pegas en los campos de texto.

¿Puedo usarlo con datos reales en producción?

Ú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.