Invisible characters. They render as nothing, so the text LOOKS correct and compares unequal. A zero-width space in a password field or a BOM at the front of a CSV are the usual causes of “but it looks identical”.
Spaces that are not the ordinary U+0020. Almost always pasted from a word processor or a web page. They survive a trim() that only strips ASCII whitespace, and they break a split on " ".
Typographic punctuation substituted by a word processor — curly quotes, en and em dashes, a single-character ellipsis. Fine in prose, and a syntax error in code, a CSV or a JSON string.
May apat na sagot sa tanong na “gaano katagal ito”, at magkakaiba silang lahat.
Ang "👨👩👧" ay 8 sa .length ng JavaScript, 5 na code point, 18 byte sa UTF-8, at 1 karakter sa taong nag-type nito.
Byte ang sinusukat ng VARCHAR(20). UTF-16 unit ang binibilang ng form validator. Ang gumagamit ay binibilang ang nakikita niya. Pumili ka ng isa at tawagin mong “haba”, at may pangalang tatanggihan ng field na mukhang sapat naman.
At may mga karakter na hindi lumalabas kahit nandiyan. Zero-width space sa password. BOM sa unahan ng CSV kaya sira ang unang pamagat ng hanay. Non-breaking space na galing sa Word. Tama ang tingin sa teksto at hindi pantay sa paghahambing.
Hiwalay ang mga control ng direksyon dito. Hindi lang sila hindi lumalabas — binabaligtad nila ang pagkakasunod ng teksto sa paligid nila, kaya maaaring iba ang nababasa at iba ang tumatakbo.
Dahil apat na magkaibang bagay ang sumusukat sa "haba". Ang VARCHAR na column at ang HTTP header ay bumibilang ng BYTE. Ang .length ng JavaScript ay bumibilang ng UTF-16 unit. Ang hangganan ng karakter sa form ay karaniwang code point. At ang taong nagtitipa ay binibilang ang nakikita niya. Para sa "👨👩👧" ay 18, 8, 5 at 1 iyon. Ang pagpili ng isa at pagtawag ditong haba ang dahilan kung bakit may pangalang tinatanggihan ng patlang na mukhang sapat naman ang haba.
Karaniwan ay isa sa tatlong bagay, at natatagpuan silang lahat nito. Isang hindi nakikitang karakter — zero-width space, soft hyphen, BOM sa unahan ng file. Isang espasyong hindi U+0020, kadalasang non-breaking space na galing sa word processor. O ibang anyo ng normalisasyon: ang "é" ay puwedeng isa o dalawang code point, at magkamukha ang dalawa sa mata at hindi pantay sa paghahambing sa halos bawat wika.
Binabaligtad nila ang pagkakasunod ng tekstong nasa paligid nila. Iba ang uri nila sa karakter na basta hindi lumalabas: ang linya ng source code na may U+202E ay puwedeng basahin sa isang paraan at tumakbo sa iba, at iyon ang uri ng pag-atakeng Trojan Source. May sarili silang natuklasan, mas mataas sa lahat maliban sa sirang teksto, sa halip na nakalista katabi ng isang smart quote.
Depende sa gamit ng teksto. Tama ang smart quote sa sulatin at syntax error sa JSON o CSV. Sinasadya ang non-breaking space sa "10 kg" at bug ito sa key ng database. Ganap na wasto ang astral na karakter at problema lang ito kung may humihiwa ayon sa .length sa dulo ng daloy. Pinapangalanan ng tool kung ano ang nandoon at bakit ito mahalaga; nasa iyo ang pasya kung nararapat ito.
Dahil megabyte ang buong Unicode character database at walang anumang dependency na kasama ang engine na ito. Ang bawat karakter na sulit bigyan ng babala ay eksaktong pinapangalanan. Ang lahat ng iba ay kinikilala sa pamamagitan ng Unicode block nito, na makatotohanan at maikli. Ang paggawa-gawa ng pangalang mukhang tama ay mas masama kaysa sa isang tapat.
Ang NFC ay ang pinagsanib na anyo ng normalisasyon, at iyon ang default ng web. Kung naghahambing ka ng string, ginagamit sila bilang key, o itinatago para sa pagsusuri ng pagkakaisa, mag-normalise muna — kung hindi ay tatanggapin ang dalawang magkamukhang halaga at hindi kailanman tatakbo ang pagsusuri mo sa doble. Lumalabas lang ang pindutan kapag wala pa sa NFC ang teksto.
Runs entirely in your browser; nothing is transmitted. Full Unicode names are not shipped — every character worth warning about is named exactly, and the rest are identified by block rather than guessed at. Walang ipinapadala sa mga server namin ang tina-type mo rito — sa browser mo tumatakbo nang buo ang pagkuwenta.