Přátelské varování ohledně UTF8:

Mám jednoduchou aplikaci, která bere zprávy z RSS a zobrazuje mi jejich zkrácené verze na monitoru. Všechno jede v UTF8. Stávalo se mi, že čas od času některý nadpis měl naprosto pomrvenou diakritiku. Říkal jsem si, že to je dočasný problém s nějakým zpravodajským webem, a ignoroval jsem to (stávalo se to asi v jednom z 1000 případů). Ovšem iritovalo mě to, tak jsem se v tom začal hrabat, a zjistil jsem, že nadpis stáhnu vždy správně. Ale on se někdy špatně zobrazí! A neviděl jsem v tom žádnou logiku. Některé nadpisy se zobrazovaly špatně, ale po přidání jedné mezery už byly OK. Nebo naopak.

Chyba byla samozřejmě na mé straně.

Potřeboval jsem z každého nadpisu jen začátek, tudíž jsem z nich bral jen prvních 99 bajtů (na obrazovku se vejde jen asi 60 znaků s proměnlivou šířkou, a co je mimo ni mě nezajímá). Problém byl v tom, že pokud UTF8 text oříznete náhodou tak, že končí uprostřed vícebajtového znaku, tak správný, specifikací se držící program (v tomto případě GraphicsMagick) musí nutně dojít k závěru, že výsledný string už NENÍ UTF8. Tedy ne že se zmrví ten poslední znak (což by mi bylo jedno), ale celý string se bere jako 1 byte = 1 znak (tudíž má zcela zprzněnou diakritiku). Tudíž byl problém jen s nadpisy, jejichž 99. bajt byl shodou okolností první bajt dvoubajtového českého znaku.

Naštěstí je UTF8 vymyšleno tak, aby se toto snadno ověřovalo. Pokud nechcete instalovat nějakou UTF8 knihovnu jenom kvůli tomuhle, stačí oříznutí provést v takovém místě, aby poslední byte měl hodnotu <= 127 a výsledek vždycky bude validní UTF8.
Photo
Shared publiclyView activity