Az Unicode normalizálás és az ékezet levonás magyarázata
Beilleszt egy nevet, például a „José”-t a keresőmezőbe, és az nem egyezik a „José” másik példányával az adatok között – annak ellenére, hogy a képernyőn azonosnak tűnnek. Exportál egy listát egy slug URL-re, és két különböző bájtsorozatot kap abból, aminek ugyanannak a szónak kellene lennie. A bűnös az Unicode normalizálás, ennek megértése elengedhetetlen a szövegfeldolgozáshoz, az adategyeztetéshez és a karakterkódolási munkákhoz.
Mi az Unicode normalizálás?
A Unicode lehetővé teszi, hogy ugyanazt a vizuális karaktert egynél több módon ábrázolják. Az „é” betű létezhet egyetlen előre megszerkesztett karakterként (U+00E9) vagy „e” alapbetűként (U+0065), amelyet egy kombinált éles ékezet követ (U+0301). Mindkettő azonosan jelenik meg a képernyőn, de eltérő bájtsorozattal rendelkeznek. A normalizálás ezeket a változatokat kanonikus formává alakítja, így következetesen hasonlítják össze és rendezik őket.
NFC vs NFD: a két gyakori forma
A következő két normalizálási formával találkozhat:
- NFC (Canonical Decomposition, majd Canonical Composition) — az alapkaraktereket a hozzájuk tartozó ékezetes karakterekkel egyesíti egyetlen előre összeállított karakterré. Ez a W3C alapértelmezett és a legelterjedtebb forma az interneten.
- NFD (Canonical Decomposition) — az előre összeállított karaktereket alapkarakterükre, valamint a kombinált jelekre bontja. Hasznos, ha az ékezeteket külön kell kezelni vagy ellenőrizni.
Léteznek NFKC és NFKD (kompatibilitási változatok) is, amelyek tovább mennek, a ligatúrákat és a stílusváltozatokat alap megfelelőikké alakítják – ez akkor hasznos, ha azt szeretné, hogy az „fi” egyezzen az „fi”-vel.
Miért számít ez a gyakorlatban
A karakterlánc-összehasonlítás a pontos bájtegyeztetéstől függ, hacsak nem normalizálja először. Az NFC formátumú "café" adatbázisban végzett keresése nem találja meg az NFD formában tárolt "café" kifejezést. Az ékezetes karaktereket tartalmazó URL-eket a különböző rendszerek eltérően értelmezhetik. A rendezési algoritmusok eltérő sorrendet állítanak elő, ha egyes bejegyzések NFC, mások pedig NFD. Minden olyan szöveges folyamat, amely több forrásból – API-válaszokból, felhasználói feltöltésekből, örökölt adatbázisokból – származó adatokat kombinál, rejtett eltéréseket kockáztat.
Az ékezetek normalizálása és eltávolítása a slugs-hez és a kereséshez
A webcímek és adatbázis-kulcsok általában nem tartalmazhatnak ékezetes karaktereket vagy kombinációs jeleket. A szokásos megközelítés az NFC-re normalizálás (vagy néha NFD-re, majd az egyesítő karakterek eltávolítása), majd az ékezetek teljes eltávolítása karakterbontással. Ez a "naivitást" "naivitás"-vá alakítja a slug biztonságos kimenethez. Használat normalizál-unicode megtekintheti, hogyan néz ki az NFC és az NFD, vagy kiemelések eltávolítása hogy egy lépésben lecsupaszítsa őket. A maximális kompatibilitás érdekében távolítsa el a nem-ascii-t továbbmegy, és eltávolít minden karaktert az ASCII tartományon kívülről, csak az a-z, A-Z és az alapvető írásjeleket hagyja meg.
Unicode kezelése a munkafolyamatban
Mielőtt szöveget keres, összehasonlítana vagy rendezne egy alkalmazásban:
- Normalizálja az összes bemenetet NFC-re (vagy NFD-re, ha konkrét oka van).
- Tárolja folyamatosan ugyanabban a formában.
- Összehasonlítás, keresés és rendezés a normalizálás után.
URL-ek vagy adatbázis-azonosítók létrehozásakor először normalizálja, majd távolítsa el az ékezeteket és a nem ASCII-karaktereket. Az egyes karakterek valójában – a kódpontjuk, a jelek kombinálása, a kategória – megértése segít ezeknek a problémáknak a hibakeresésében. char-code-converter megmutatja a pontos Unicode értékeket és neveket az egyes karakterek mögött.
Az adatvédelem előtt álló szövegfeldolgozás
Az összes TextArray eszköz, beleértve a Unicode-ot és az ékezetkezelést is, teljes egészében a böngészőben fut. Szöveg soha nem hagyja el az eszközt, nincs szükség fiókokra, és a webhely offline módban működik a kezdeti betöltés után. Biztonságosan beilleszthet érzékeny adatokat, kísérletezhet a normalizálással, és törölheti az ékezeteket anélkül, hogy bármit is feltöltene a szerverre. Ez különösen akkor hasznos, ha olyan privát nevekkel, címekkel vagy azonosítókkal dolgozik, amelyeket használat előtt meg kell tisztítani.
Kezdő lépések
Másoljon ékezetes karakterláncot bármely szövegeszközünkbe, és nézze meg a normalizálást és az ékezetes levonást működés közben. Kísérletezzen az NFC-vel és az NFD-vel, hasonlítsa össze egymás mellett a kódpontokat, és építsen magabiztosságot a karakterekben, akikkel dolgozik. Miután megértette, hogyan működik az Unicode a motorháztető alatt, a szövegillesztés és a slug generáció kiszámíthatóvá és megbízhatóvá válik.