Español

Herramientas de desarrollo · Comparación de texto

Diferencias invisibles: espacios sin separación, comillas tipográficas y formularios Unicode

· Cómo funciona

diferencia de texto Unicode depuración

Bloques de líneas visualmente similares que contienen distintas formas de caracteres ocultos
Ilustración de vector original de ToolAcre

Explica por qué las líneas que se ven iguales en la pantalla pueden diferir byte a byte, desde espacios continuos y comillas hasta caracteres de ancho cero y acentos descompuestos, y cómo encontrarlos.

Dos líneas que parecen idénticas pero están marcadas como modificadas: se abre con un archivo de traducción que no pasa la revisión sin ningún motivo visible.

Una línea de traducción puede representarse exactamente igual que su vecina y aun así fallar la comparación. Las fuentes del navegador ocultan los límites de los puntos de código, combinan acentos y asignan formas similares a diferentes signos de puntuación. ToolAcre compara cadenas de JavaScript solo después de las transformaciones de mayúsculas y minúsculas seleccionadas o de espacios en blanco, por lo que una fila marcada puede exponer una distinción textual real.

Confía en la ubicación, no en una suposición sobre el personaje. Copie la línea sospechosa en un editor que revele puntos de código o un inspector hexadecimal. La diferencia te dice qué línea difiere; no anota la posición interna ni nombra el valor Unicode responsable.

Espacios que no se separan y sus parientes: explica U+00A0 y otros caracteres de espacio que insertan los procesadores de texto y por qué un espacio simple no coincide con ellos.

U+00A0 el espacio no separable no es el mismo carácter que el espacio ordinario U+0020. En modo normal, sus claves de línea siguen siendo distintas. En Ignorar espacios en blanco, el reemplazo de ejecución de espacios en blanco puede reducir esas ejecuciones a un espacio normal después del recorte, haciendo que algunas de esas diferencias desaparezcan.

Esa opción es una transformación coincidente, no un comando de limpieza Unicode. Las filas iguales mostradas conservan el texto izquierdo original y no se genera ningún documento corregido. Si un sistema de publicación requiere un espaciado continuo, una coincidencia normalizada podría ocultar una instrucción de diseño intencional en lugar de corregirla.

El modo de espacios en blanco puede colapsar los espacios en blanco Unicode; la comparación ordinaria conserva caracteres distintos

Los apóstrofos rectos y las comillas difieren de las formas tipográficas de apertura y cierre. Ignorar mayúsculas y minúsculas no cambia la puntuación y el manejo de espacios en blanco no reescribe las comillas. Por lo tanto, la autocorrección de un procesador de textos puede producir un reemplazo de línea completa incluso cuando la oración se lee idéntica a simple vista.

Elija la puntuación deseada según el destino. El código fuente, las claves de búsqueda y los formatos de datos pueden requerir caracteres ASCII exactos, mientras que el texto editorial puede preferir formas tipográficas. La comparación prueba la diferencia, pero no tiene una política para decidir qué lado es el correcto.

Caracteres direccionales y de ancho cero: cubre espacios de ancho cero, uniones y marcas bidireccionales que se representan como nada y aún no cambian la línea.

Los espacios de ancho cero, las uniones y las marcas direccionales pueden ocupar posiciones de cadena sin dibujar un glifo visible. ToolAcre procesa la entrada utilizando contenido de texto, evitando la interpretación HTML, pero esa representación segura no hace visibles los puntos de código ocultos. Todavía participan en la igualdad de línea ordinaria.

El comportamiento direccional también puede hacer que el orden visual sea una guía poco confiable para el orden de almacenamiento. No copie un fragmento sospechoso de direcciones mixtas en un comando o identificador del shell simplemente porque le resulte familiar. Inspeccione los puntos de código y el contexto circundante en una herramienta especialmente diseñada antes de reemplazar cualquier cosa.

Acentos compuestos y descompuestos: explica la normalización NFC frente a NFD con una letra acentuada como un punto de código frente a una letra base más una marca combinada

Un carácter acentuado se puede representar como un punto de código precompuesto o como una letra base seguida de una marca de combinación. El repositorio no contiene ninguna llamada a `normalize`, por lo que los formularios canónicamente equivalentes siguen siendo cadenas de JavaScript diferentes y pueden producir filas para eliminar y agregar.

El conjunto de pruebas demuestra que coinciden cadenas Unicode idénticas y `café` difiere de `cafe`; no promete una comparación con reconocimiento de grafemas. Por lo tanto, este artículo evita afirmaciones sobre comparación de bytes o equivalencia completa de Unicode. El algoritmo de línea recibe cadenas y compara sus claves transformadas con estricta igualdad.

Los acentos compuestos y descompuestos siguen siendo diferentes porque la herramienta no realiza ninguna normalización Unicode

Supongamos que una línea de recursos aparece sin cambios pero está marcada. Primero compare con todas las opciones desactivadas, luego active solo los espacios en blanco. Si la fila se vuelve igual, inspecciona los espacios y los espacios en blanco ocultos. Si permanece cambiado, inspeccione las comillas, combine marcas y otros puntos del código en lugar de volver a escribir la línea repetidamente.

Un inspector de caracteres puede revelar U+00A0 donde se esperaba un espacio normal. Reemplácelo solo después de confirmar el requisito del formato. En el contenido traducido, los espacios que no se separan pueden ser convenciones de puntuación deliberadas, y una búsqueda y reemplazo amplia puede dañar la tipografía correcta en otros lugares.

Lo que esto no cubre: la comparación informa que las líneas difieren; no realiza la normalización Unicode ni reemplaza caracteres

La diferenciación de texto no normaliza NFC o NFD, no identifica elementos confusos, elimina marcas de ancho cero ni produce una salida reparada. Tampoco compara bytes codificados. Se trata de operaciones separadas con consecuencias que un comparador de línea genérico no debería elegir en silencio.

Ignorar mayúsculas y minúsculas utiliza JavaScript `toLowerCase`, mientras que Ignorar espacios en blanco recorta y condensa las claves coincidentes. Ninguna operación proporciona una clasificación basada en la configuración regional ni una revisión de seguridad Unicode. Utilice el resultado para limitar una investigación, no para certificar identificadores como seguros o lingüísticamente equivalentes.

Conclusión: confíe en la diferencia con sus ojos: concluye que una línea marcada es una diferencia real y muestra cómo la comparación de texto de ToolAcre señala qué líneas inspeccionar

Cuando la vista y la diferencia no están de acuerdo, asuma que la cadena merece inspección. El algoritmo no tiene un modelo visual que deje engañar por la forma de la fuente; ve claves de línea. Esa limitación es útil porque evita que pasen diferencias ocultas simplemente porque un navegador las dibuja de manera similar.

Primero ejecute la comparación ordinaria, registre qué opción cambia el resultado e inspeccione los puntos de código antes de editarlos. Este rastro de evidencia separa la normalización de espacios en blanco de la puntuación o composición y evita el hábito destructivo de reemplazar cada carácter inusual con una aproximación ASCII.