Italiano

Strumenti per sviluppatori · Confronto di testi

Differenze invisibili: spazi unificatori, virgolette intelligenti e moduli Unicode

· Come funziona

testo-diff unicode debug

Blocchi di linea visivamente simili contenenti forme di caratteri nascosti distinti
Illustrazione vettoriale originale ToolAcre

Spiega perché le linee che appaiono uguali sullo schermo possono differire byte per byte, da spazi unificatori e virgolette inglesi a caratteri di larghezza zero e accenti scomposti, e come trovarli.

Due righe che sembrano identiche ma sono contrassegnate come modificate: si aprono con un file di traduzione che non supera la revisione senza un motivo visibile

Una linea di traduzione può essere resa esattamente come la sua vicina e comunque fallire il confronto. I caratteri del browser nascondono i limiti dei punti di codice, combinano gli accenti e assegnano forme simili a punteggiatura diversa. ToolAcre confronta le stringhe JavaScript solo dopo le trasformazioni di maiuscole e minuscole selezionate o di spazi bianchi, quindi una riga contrassegnata può esporre una vera distinzione testuale.

Fidati della posizione, non di un'ipotesi sul personaggio. Copia la riga sospetta in un editor che riveli punti di codice o un ispettore esadecimale. La differenza ti dice quale linea differisce; non annota la posizione interna né nomina il valore Unicode responsabile.

Spazi unificatori e relativi parenti: spiega U+00A0 e altri caratteri di spazio inseriti dagli elaboratori di testo e perché uno spazio semplice non corrisponde a essi

U+00A0 lo spazio unificatore non è lo stesso carattere dello spazio ordinario U+0020. Nella modalità ordinaria i tasti di linea rimangono distinti. In Ignora spazi bianchi, la sostituzione degli spazi bianchi può ridurre tali esecuzioni a uno spazio ordinario dopo il taglio, facendo scomparire alcune di queste differenze.

Questa opzione è una trasformazione corrispondente, non un comando di pulizia Unicode. Le righe uguali visualizzate mantengono il testo originale a sinistra e non viene prodotto alcun documento corretto. Se un sistema di pubblicazione richiede una spaziatura unificatore, una corrispondenza normalizzata potrebbe nascondere un'istruzione di layout intenzionale anziché correggerla.

La modalità spazi bianchi potrebbe comprimere gli spazi bianchi Unicode; il confronto ordinario preserva caratteri distinti

Gli apostrofi semplici e le virgolette differiscono dalle forme tipografiche di apertura e chiusura. Ignorare maiuscole e minuscole non modifica la punteggiatura e la gestione degli spazi bianchi non riscrive le virgolette. La correzione automatica di un elaboratore di testi può quindi produrre una sostituzione dell’intera riga anche quando la frase si legge in modo identico a prima vista.

Scegli la punteggiatura prevista in base alla destinazione. Il codice sorgente, le chiavi di ricerca e i formati dei dati possono richiedere caratteri ASCII esatti, mentre il testo editoriale può preferire forme tipografiche. Il confronto dimostra la differenza, ma non ha alcuna politica per decidere quale parte abbia ragione.

Caratteri direzionali e di larghezza zero: copre spazi di larghezza zero, giunzioni e segni bidirezionali che vengono visualizzati come nulla ma cambiano la linea

Gli spazi di larghezza zero, i joiner e i segni direzionali possono occupare posizioni di stringa senza disegnare un glifo visibile. ToolAcre esegue il rendering dell'input utilizzando il contenuto di testo, evitando l'interpretazione di HTML, ma il rendering sicuro non rende visibili i punti di codice nascosti. Partecipano ancora all'uguaglianza di linea ordinaria.

Il comportamento direzionale può anche rendere l'ordine visivo una guida inaffidabile per l'ordine di archiviazione. Non copiare un frammento sospetto in direzioni miste in un comando o identificatore di shell semplicemente perché sembra familiare. Ispeziona i punti di codice e il contesto circostante in uno strumento appositamente creato prima di sostituire qualsiasi cosa.

Accenti composti e scomposti: spiega NFC rispetto alla normalizzazione NFD con una lettera accentata come punto di codice rispetto a una lettera di base più un segno di combinazione

Un carattere accentato può essere rappresentato come un punto di codice precomposto o come una lettera di base seguita da un segno di combinazione. Il repository non contiene chiamate a `normalize`, quindi i moduli dall'aspetto canonicamente equivalenti rimangono stringhe JavaScript diverse e possono produrre righe di rimozione-aggiunta-aggiunta.

La suite di test dimostra che le stringhe Unicode corrispondono e che `café` differisce da `cafe`; non promette confronti consapevoli del grafema. Questo articolo evita quindi affermazioni sul confronto dei byte o sull'equivalenza completa di Unicode. L'algoritmo di linea riceve stringhe e confronta le chiavi trasformate con rigorosa uguaglianza.

Gli accenti composti e scomposti rimangono diversi perché lo strumento non esegue la normalizzazione Unicode

Supponiamo che una linea di risorse appaia invariata ma sia contrassegnata. Prima confronta con tutte le opzioni disattivate, quindi attiva solo gli spazi bianchi. Se la riga diventa uguale, controlla gli spazi e gli spazi bianchi nascosti. Se rimane modificato, controlla le virgolette, combinando segni e altri punti di codice anziché riscrivere ripetutamente la riga.

Un ispettore del personaggio può rivelare U+00A0 dove era previsto uno spazio ordinario. Sostituirlo solo dopo aver confermato i requisiti del formato. Nel contenuto tradotto, gli spazi unificatori possono essere convenzioni di punteggiatura intenzionali e un'ampia ricerca e sostituzione può danneggiare la tipografia corretta altrove.

Ciò che questo non copre: il confronto riporta che le linee differiscono; non esegue la normalizzazione Unicode per te né sostituisce i caratteri

La differenza di testo non normalizza NFC o NFD, identifica elementi confondibili, rimuove segni di larghezza zero o produce un output riparato. Inoltre non confronta i byte codificati. Si tratta di operazioni separate con conseguenze che un generico comparatore di linea non dovrebbe scegliere in silenzio.

Ignora maiuscole e minuscole utilizza JavaScript `toLowerCase`, mentre Ignora spazi bianchi ritaglia e condensa le chiavi corrispondenti. Nessuna delle due operazioni fornisce un confronto basato sulle impostazioni locali o una revisione della sicurezza Unicode. Utilizza l'output per restringere un'indagine, non per certificare gli identificatori come sicuri o linguisticamente equivalenti.

Conclusione: fidati della differenza che hai davanti agli occhi: conclude che una linea contrassegnata è una differenza reale e mostra come il confronto del testo di ToolAcre individua quali linee ispezionare

Quando la vista e il differenziale non sono d'accordo, presumi che la corda meriti un'ispezione. L'algoritmo non ha un modello visivo che possa essere ingannato dalla modellazione dei caratteri; vede i tasti di linea. Questa limitazione è utile perché impedisce che le differenze nascoste passino semplicemente perché un browser le disegna allo stesso modo.

Esegui prima il confronto ordinario, registra quale opzione modifica il risultato e controlla i punti di codice prima di modificarli. Questa traccia di prove separa la normalizzazione degli spazi bianchi dalla punteggiatura o dalla composizione ed evita l'abitudine distruttiva di sostituire ogni carattere insolito con un'approssimazione ASCII.