Zašto tekst koji izgleda identično to nije
Unicode ima više od 150.000 znakova i mnogi od njih su nevidljivi ili izgledaju potpuno isto kao neki drugi. String kopiran sa veb stranice, iz PDF-a ili čet aplikacije može da nosi razmake nulte širine, nelomljive razmake, meke crtice, oznake smera i oznaku redosleda bajtova, od kojih se nijedan ne vidi na ekranu, a svi čine da poređenja, prijave i pretrage baze ne uspeju. Dvojnici su gori: ćirilično а (U+0430) je u većini fontova piksel-identično latiničnom a (U+0061), što je osnova homografskih phishing domena i tiketa tipa „zašto ovo korisničko ime ne postoji“.
Šta inspektor prijavljuje
- Kodna tačka (
U+00E9): broj koji Unicode dodeljuje. Jedan vidljivi znak može biti jedna kodna tačka (éprekomponovano) ili dve (e+ kombinujući akut), što je razlika NFC/NFD. - UTF-8 bajtovi: 1–4 bajta po kodnoj tački; ono što se čuva u datotekama, bazama i HTTP-u. UTF-16 jedinice: ono što broje JavaScript i Java stringovi; emodži zauzima dve.
- Grafemi: ono što čovek vidi kao jedan znak. Emodži zastava je jedan grafem, dve kodne tačke, osam UTF-8 bajtova.
Normalizacija
NFC sastavlja osnovu + oznaku u jednu kodnu tačku tamo gde ona postoji; NFD rastavlja. Poredite i čuvajte tekst u NFC (imena datoteka sa macOS-a stižu u NFD, što je klasična greška pri sinhronizaciji). NFKC i NFKD dodatno sažimaju kompatibilne znakove: ligature, slova pune širine, eksponenti i znakovi rimskih brojeva postaju svoji obični ekvivalenti, što želite za pretragu i identifikatore, ali uništava formatiranje.
Čišćenje unosa
Za identifikatore, korisnička imena i domene: normalizujte u NFKC, uklonite znakove koje ovaj alat označava kao nevidljive, i odbijte ili upozorite na mešana pisma. Opcija „sakrij nevidljive“ daje vam očišćeni string za kopiranje.
Pitanja
Šta je razmak nulte širine?
U+200B, znak bez širine koji označava moguće mesto preloma reda. Preživljava kopiranje i lepljenje i nevidljiv je u gotovo svakom editoru. Programi za obradu teksta, Slack i neke veb stranice ga ubacuju; ovaj inspektor označava svaki.
Zašto se "é" ponekad broji kao dva znaka?
Može da se zapiše kao jedna kodna tačka U+00E9 ili kao U+0065 e praćeno sa U+0301 kombinujući akut. Izgledaju isto, a porede se kao različiti osim ako se oba ne normalizuju u NFC.
Kako da ukucam znak po kodnoj tački?
Linux (GTK): Ctrl+Shift+U, pa heks, pa razmak. macOS: uključite izvor unosa Unicode Hex Input i držite Option. Windows: ukucajte heks pa Alt+X u Wordu i WordPadu. U kodu: "\u{1F600}" (JS), "\N{...}" ili "\U0001F600" (Python).
Koja je razlika između UTF-8 i Unicodea?
Unicode je katalog znakova i njihovih brojeva. UTF-8 (i UTF-16, UTF-32) je način da se ti brojevi zapišu kao bajtovi. UTF-8 je onaj koji se koristi svuda na vebu.