Občas na internetu kolují různé zprávy a vtípky, které využívají nějakou obskurní chybu v kódu. A přesně takovou zprávou se před sedmi lety zabýval Tom. V tomto videu ukazuje, jak fungují neviditelné znaky v Unicodu, které za tímto prankem stály.
Existuje stará pirátská legenda
o černé tečce, kulatém útržku papíru, z jedné strany černém
a z druhé s poselstvím zkázy, co předznamenává odsouzení nebo smrt. A dnes tu máme také černou skvrnu,
takový černý puntík. Na WhatsAppu koluje zpráva, která aplikaci
rozbije, když kliknete na černý puntík. A je to úplně běžná chyba
s vykreslováním textu v Androidu, přes WhatsApp se to jen šíří. A já o tom původně nechtěl mluvit, protože takovéhle chyby
jsou dnes celkem časté a docela nudné.
Chybí tomu příběh. Pošlete divné znaky, spustíte chybu
někde ve vykreslovači textu, to je ta část kódu,
co ukazuje text na obrazovce. A protože nikoho nenapadlo
poslat zrovna tuhle kombinaci znaků v tom konkrétním pořadí,
protože v běžné řeči se to nestane, tak ta aplikace spadne.
Jako kdykoli jindy. A brzy to někdo opraví.
Jenže v tomhle případě je zajímavé,
jaké konkrétní znaky to způsobily. Když zanalyzujete, co vlastně
ta zpráva s puntíkem obsahuje, zjistíte, že je tam
spousta neviditelných znaků. Unicode, což je mezinárodní standard
pro přenášení textu mezi počítači, obsahuje desetitisíce znaků
pokrývajících všechny jazyky světa. Ale taky tam jsou definované
neviditelné znaky. Jeden z nich je mezera s nulovou šířkou,
značí místo, kde lze zalomit dlouhé slovo. Další určuje, jestli má diakritika
nad a pod písmeny s nimi tvořit jeden znak, nebo se dělí na dva.
A některé znaky určují,
jakým směrem má být text napsaný. Hodně jazyků se píše zprava doleva, například ty, které využívají
arabské nebo hebrejské písmo. Když používáte tato písma,
standard Unicodu se o všechno postará za vás. Ty znaky
mají stanoveno, že jdou zprava doleva. Když použijete hebrejskou abecedu,
všechna moderní zařízení ji napíšou zprava doleva.
Zleva doprava není vždy výchozí,
i když to anglofonní svět očekává. Tohle základní nastavení znaků znamená,
že když chcete napsat hebrejský text uprostřed angličtiny,
není to problém. Kód, který text vykresluje, zjistí,
jak dlouhý je úsek textu zprava doleva, tolik místa si tam nechá
a pokračuje se zbytkem anglického textu. Nebo když potřebujete čísla
psaná zleva doprava uprostřed arabského textu,
co je zprava doleva, funguje to stejně. Většinou si s tím
nemusíte dělat starosti.
Ale existují situace, krajní případy,
kdy tohle nefunguje. Nebudu se je snažit popisovat, ani je nevyjmenuju, protože je to celé
fakt matoucí a nezajímavé. Ale do popisku dám odkaz
na dvousměrný algoritmus Unicodu. Tam si můžete přečíst detaily.
Ve zkratce: aby bylo možné to vyjasnit,
existují v Unicodu neviditelné znaky, které tomu vykreslovači říkají:
„Hele, ten následující kousek napiš zprava doleva.
I když je to latinka.“ Anebo naopak. Za ty roky už tyhle znaky
přinesly spoustu vtípků a triků. Dalo se to dávat
do komentářů na blogu nebo na fóra… Pro mladší diváky: na blozích a fórech
jsme si na netu povídali, než to všichni vzdali
a vlezli do těch oplocených zahrad. Každopádně, když ty znaky
dáte do komentáře na špatně udělaném webu, píšou najednou všichni pozpátku
a je to hrozně matoucí. Před deseti lety
nám to přišlo legrační. V té zprávě s černým puntíkem
jsou asi 2 000 neviditelných znaků, které mění směr textu tam a zpátky.
A jsou to zkrátka znaky
s definovaným směrem, jako byste napsali písmeno A
a hebrejský alef tisíckrát vedle sebe. Jenže jsou všechny neviditelné
a mají nulovou šířku. A někde v téhle džungli
se ten systém prostě zmate. Text zvládne zobrazit,
ale když na něj poklepete, musí zjistit, na jaký znak
jste se to trefili, aby to šlo označit nebo zkopírovat.
A ty tisíce neviditelných znaků
pak způsobí problém, jehož podstatu tým developerů z Androidu
určitě vyřeší během pár týdnů. Má s tím ten černý puntík
cokoli společného? Nejspíš ne. Asi by to šlo
s jakýmkoli emotikonem. Možná s jakýmkoli znakem, stejně by to fungovalo.
Zatím to ještě nevíme jistě, ale ten samotný černý puntík
zřejmě nepřináší vašemu telefonu zkázu. Což platí i o té původní černé tečce.
To taky nebyla stará pirátská legenda. Robert Louis Stevenson si to vymyslel,
když psal Ostrov pokladů. Překlad: jesterka
www.videacesky.cz