Qué es realmente el texto y por qué las herramientas no se ponen de acuerdo
Un archivo de texto son bytes más una codificación, y la codificación no se guarda en el archivo. Solo una convención le dice a un programa que cierto byte significa “é”, y por eso el mismo archivo se abre bien en un lugar y como “é” en otro. UTF-8 es la respuesta moderna: guarda las letras latinas comunes en un byte, las letras con acento en dos, y la mayor parte del chino, el japonés, el árabe y todos los emojis en tres o cuatro. UTF-16 es lo que usan internamente Windows y JavaScript: guarda casi todo en dos bytes y el resto en cuatro. Windows-1252 y Latin-1 son las codificaciones de un solo byte que todavía generan los sistemas antiguos, y son el origen habitual del mojibake (el texto con caracteres extraños). Conviene saber esto sobre estas páginas: el Visor de CSV detecta la codificación del archivo que sueltas, incluidas UTF-16 y Windows-1252, y te deja cambiarla. Los cuadros de texto simples no: un archivo que sueltas se lee como UTF-8, así que una exportación en Latin-1 mostrará mal sus letras con acento, y la solución es convertirla primero.
“Carácter” tiene cuatro significados, y el que necesitas depende de quién pone el límite. Lo que una persona ve como un carácter es un clúster de grafemas. Lo que coincide con una expresión regular es un punto de código. Lo que informa string.length en JavaScript son unidades UTF-16. Lo que mide una columna de base de datos o un encabezado HTTP son bytes UTF-8. En inglés simple, las cuatro cifras coinciden, y por eso nadie lo nota; pero un emoji de familia es un grafema, siete puntos de código, once unidades UTF-16 y veinticinco bytes, y un mensaje de 200 caracteres termina rechazado por un campo de 255. El Contador de caracteres muestra las cuatro cifras justamente por eso.
Los caracteres invisibles son caracteres reales. Un espacio de no separación se ve idéntico a un espacio y es un carácter completamente distinto: llega todo el tiempo en texto copiado de una página web o de un procesador de textos, y rompe búsquedas, el análisis de CSV y el código que divide por espacios. Los ZWJ (unión de ancho cero) son lo que mantiene unido un emoji de varias personas. Los guiones suaves, las marcas de dirección y las marcas de orden de bytes viajan con el texto pegado. Ninguno aparece en pantalla, así que la única señal que tienes es un conteo que no coincide con lo que ves, y ese es un uso honesto de un contador de caracteres. Ten en cuenta que la opción de ignorar espacios de Comparar textos unifica los espacios y tabulaciones comunes; no trata un espacio de no separación como un espacio, porque no son lo mismo.
Los finales de línea son la razón por la que a veces una comparación muestra todas las líneas como cambiadas. Windows termina una línea con retorno de carro y salto de línea; todos los demás usan solo el salto de línea. Guarda un archivo LF desde un editor de Windows y cada una de sus líneas diferirá en un byte invisible, así que una comparación byte a byte (git diff, diff(1)) informa que todo el archivo se reescribió y oculta el único cambio que hiciste de verdad. Nuestras herramientas Comparar textos y Eliminar líneas duplicadas dividen las líneas según las tres convenciones antes de comparar, así que aquí un archivo que solo cambió sus finales de línea no aparece como una pared en rojo. Eso es una comodidad en una herramienta de lectura y una trampa en un repositorio: corrígelo en el origen, con tu editor o con la configuración de finales de línea del propio git.
Dos cadenas que se ven idénticas pueden compararse como distintas, y la normalización suele ser la causa. Unicode puede escribir “é” de dos maneras: como un solo punto de código o como una “e” simple seguida de un acento agudo combinable. Se muestran igual y son secuencias de bytes distintas, así que una comparación, una eliminación de duplicados o una búsqueda en una base de datos las trata como dos valores diferentes. macOS y Windows históricamente no se han puesto de acuerdo sobre qué forma usar en los nombres de archivo, y así es como una lista reunida desde dos computadoras termina con lo que parecen duplicados exactos que no se pueden eliminar. El Contador de caracteres es la forma de detectarlo: las dos formas tienen el mismo número de grafemas y un número distinto de puntos de código. Ninguna de estas herramientas convierte de una forma a otra; eso se resuelve con una línea en un script con una biblioteca de Unicode, como unicodedata.normalize de Python.
El “número de palabras” es un criterio, no una medición. Dividir por espacios en blanco es una regla del inglés, y aplicarla al chino, al japonés o al tailandés (que no ponen espacios entre palabras) cuenta un artículo largo como una sola palabra. Nuestro contador usa en su lugar la segmentación de palabras Unicode del navegador, que sabe dónde empiezan las palabras en cualquier sistema de escritura. Los desacuerdos que quedan tienen que ver con los guiones (“well-known” es una palabra aquí y en Word, y dos en algunas herramientas), los números sueltos y qué cuenta como oración: “We met Dr. Smith” es una sola oración y un divisor ingenuo dice que son dos. El tiempo de lectura es una estimación más encima de eso: 238 palabras por minuto en lectura silenciosa, según un metaanálisis y no la cifra redonda que se copia de un blog a otro.
Cuándo un navegador realmente no es la herramienta adecuada
Nada de lo que hay en este módulo se envía ni se guarda nunca, y por eso es seguro pegar aquí un borrador inédito o código fuente propietario. Eso también fija el límite, y preferimos decirte dónde está antes de que lo descubras a mitad de camino.
Archivos grandes. Todo el texto se mantiene en la memoria de la pestaña y se vuelve a analizar mientras escribes. Unos pocos megabytes van sin problema; un archivo de registro de cientos de megabytes no, y un celular se rinde antes que una laptop. La línea de comandos no tiene este problema porque procesa en streaming: grep y ripgrep buscan en archivos más grandes que tu memoria, sed y awk los transforman línea por línea, y sort con la opción de únicos elimina duplicados de una lista de decenas de millones de líneas apoyándose en el disco. Todos son gratuitos y ya vienen instalados en macOS y Linux.
Documentos muy diferentes. Comparar textos se detiene en 8,000 diferencias, porque a partir de ahí el consumo de memoria del algoritmo crece tan rápido que congela la pestaña, y una comparación tan grande es ilegible de todos modos. Dos versiones del mismo documento casi nunca llegan a ese límite; dos documentos sin relación llegan de inmediato. Para revisar código, diff y git diff manejan cualquier tamaño, y una buena herramienta de fusión a tres bandas hace algo que esta página no puede hacer en absoluto.
Cambiar una codificación o normalizar Unicode. Estas páginas leen e informan; no convierten entre codificaciones. iconv convierte entre todas las codificaciones que existen, el comando file adivina cuál tienes, y la normalización Unicode es una línea de Python o una llamada a uconv de ICU. Si estás reparando una exportación con mojibake, esas son las herramientas.
Cualquier cosa repetitiva. Estas herramientas funcionan cuando una persona hace clic. Contar las palabras de cuatrocientos documentos o minificar un directorio en cada commit es trabajo para un script o un paso de compilación; y en el caso concreto de la minificación, tu herramienta de compilación hace la misma minificación, con source maps, modo de observación y caché que un cuadro para pegar no puede ofrecer. Esta página es para el archivo que tienes delante.
CSS moderno. Minificar CSS rechaza el anidamiento nativo y la sintaxis moderna de rangos en media queries en lugar de minificarlos, porque el minificador que usa es anterior a ambos y borra sin avisar lo que no entiende. Es un rechazo honesto, no una función, y la solución es compilar primero el anidamiento con Sass, PostCSS o Lightning CSS, algo que casi seguro ya hace tu herramienta de compilación.
Cómo elegir entre herramientas que suenan parecido
Contador de palabras vs. Contador de caracteres. El mismo conteo con cifras principales distintas. El Contador de palabras destaca palabras, oraciones, párrafos y tiempo de lectura, que es como se mide un ensayo, un artículo o un discurso. El Contador de caracteres destaca caracteres, caracteres sin espacios y bytes UTF-8, que es como se mide una meta descripción, un segmento de SMS o un campo de base de datos. Si algo rechazó tu texto por ser demasiado largo, lo que necesitas es el de caracteres, y en concreto su conteo de bytes.
Comparar textos vs. Eliminar líneas duplicadas. Comparar responde “¿qué cambió entre estas dos versiones?” y necesita dos textos. El eliminador de duplicados trabaja con una sola lista y responde “¿qué aparece más de una vez aquí?”, y además te dice qué entradas se repitieron y cuántas veces, ordena de forma natural para que item2 vaya antes que item10, o conserva solo las líneas que aparecieron exactamente una vez. Encontrar las entradas que solo están en una de dos listas es tarea del eliminador de duplicados, no del comparador.
Minificar HTML vs. Minificar CSS vs. Minificar JavaScript. Tres lenguajes, tres minificadores y una coincidencia que conviene conocer: el minificador de HTML también minifica el CSS de los bloques style y el JavaScript de los bloques script, igual que las otras dos páginas. Así que un solo archivo HTML necesita una herramienta, no tres. Los archivos .css y .js separados necesitan su propia página.
Visor de XML frente a Formatear XML y Validar XML. El visor de aquí te da un árbol que puedes contraer para explorarlo, que es lo que quieres cuando el documento es grande y estás buscando algo. El formateador y el validador, en las herramientas para desarrolladores, te dan texto con sangría para volver a pegarlo en un archivo y la línea y columna exactas de un error. Leer, frente a editar y corregir.
Visor de CSV frente a abrir el archivo en Excel. No es una herramienta rival, pero es la comparación que la gente hace en realidad. Excel convierte al abrir y no pregunta: un código de producto 00123 se convierte en 123, un número de pieza 5-3 se convierte en 5 de marzo, un número de pedido largo pasa a notación científica, y una exportación separada por punto y coma de un sistema alemán termina entera en la columna A. El visor muestra cada valor como texto, exactamente como está guardado, para que veas lo que realmente te enviaron.
Vista previa de Markdown vs. Markdown a PDF. La vista previa sirve para comprobar que un README se ve como lo mostrará GitHub, en vivo mientras escribes. Markdown a PDF, en las herramientas de documentos, sirve para crear un documento terminado con saltos de página. Revísalo aquí, publícalo allá.