Hlavní obsah

Jediné české „ř“ může SMS přepnout ze 160 na 70 znaků. Otestoval jsem přesně kdy

Foto: Pexels

SMS má pořád limit daný starým kódováním. V mém reprodukovatelném testu změnilo jediné „ř“ 160znakovou zprávu z jednoho segmentu na tři.

Článek

Sto šedesát znaků je jedna z nejznámějších vlastností klasické SMS. Jenže to číslo platí hlavně tehdy, když se celý text vejde do znakové sady GSM-7. Stačí znak, který v ní není, a zpráva se může překódovat do širšího Unicode režimu. U češtiny je krásným příkladem písmeno „ř“.

Nechtěl jsem zůstat u poučky z internetu, proto jsem si napsal jednoduchý test. Neodesílá žádné SMS a nic nestojí: jen vezme text, zkontroluje, zda se vejde do základní a rozšířené tabulky GSM-7, a spočítá počet přenosových jednotek a segmentů podle běžného modelu GSM-7 versus UCS-2/UTF-16.

Výsledek, který vypadá absurdně: 160 znaků versus 160 znaků

První vzorek obsahoval přesně 160 velkých písmen A. Všechna jsou v GSM-7, takže se zpráva vejde do jediného segmentu.

Druhý vzorek měl také 160 viditelných znaků: 159 písmen A a na konci jedno české „ř“. Tím se celý text přesunul do Unicode režimu. A protože vícedílná Unicode SMS má v běžném modelu kvůli hlavičce pro spojení částí kapacitu 67 znakových jednotek na segment, 160 jednotek vyšlo na tři segmenty.

Stejná délka na obrazovce, úplně jiný přenos. To je přesně ten detail, kvůli kterému může počet znaků v editoru klamat.

Hranice 70 a 71 je stejně zajímavá jako 160

Další dva vzorky jsem postavil těsně kolem unicode limitu. Šedesát devět písmen A plus „ř“ dává 70 znaků a vejde se do jednoho Unicode segmentu. Sedmdesát A plus „ř“ dává 71 znaků — a už je potřeba zprávu rozdělit. Protože se k částem přidává informace pro jejich opětovné složení, kapacita není 70 + 1, ale typicky 67 jednotek na jeden segment vícedílné zprávy.

Právě proto je titulek formulovaný slovem „může“. Konkrétní telefon, aplikace nebo operátor může některé znaky automaticky přepsat do jednodušší podoby. Když se například „ř“ před odesláním změní na „r“, zpráva může zůstat v GSM-7. Pokud se ale znak zachová, do základní GSM-7 tabulky se nevejde.

Ani všechny „zvláštní“ znaky se nechovají stejně

Do testu jsem přidal také znak eura. Ten je v rozšířené tabulce GSM-7, takže nepřepíná zprávu do Unicode. Jen zabere dvě sedmibitové pozice místo jedné, protože se zapisuje pomocí únikového znaku a vlastního kódu. Deset znaků € proto v mém výpočtu spotřebovalo dvacet GSM-7 jednotek.

Naopak jednoduché „Cena 500 Kc“ zůstalo v GSM-7, zatímco „Cena 500 Kč“ už potřebovalo širší kódování. U tak krátké věty je to pořád jeden segment, takže si uživatel rozdílu ani nemusí všimnout. Rozdíl se projeví až u delšího textu.

Proč je to tak: SMS dostala jen 140 bajtů

Technický základ je starý a překvapivě elegantní. Jeden klasický SMS payload má 140 bajtů. Při sedmibitovém kódování GSM-7 se do nich dá zabalit až 160 základních znaků. Pokud je nutné použít 16bitové kódování, vychází jednoduchým dělením limit 70 dvoubajtových znakových jednotek.

U delších zpráv se část prostoru spotřebuje na User Data Header, který říká telefonu, že několik segmentů patří k sobě a v jakém pořadí je má složit. Proto se v praxi běžně počítá s 153 GSM-7 jednotkami nebo 67 Unicode jednotkami na segment u vícedílné SMS.

Co z toho plyne dnes

Pro člověka s neomezeným balíkem SMS může být celý rozdíl neviditelný. Telefon zprávu rozdělí a příjemci ji často zase zobrazí jako jeden celek. U firemních SMS bran, některých tarifů, roamingu nebo systémů účtovaných po segmentech už ale stejný text může znamenat jiný počet odeslaných jednotek.

A hlavně je to krásný příklad technologie, která vypadá moderně, ale pořád v sobě nese omezení z doby, kdy se každý bit počítal. Jediné „ř“ není problém češtiny. Je to jen okamžik, kdy se stará sedmibitová krabička přestane na dnešní text stačit.

Metoda testu

Skript používá seznam znaků základní a rozšířené tabulky GSM-7. Pokud jsou v textu pouze tyto znaky, počítá septety; znaky z rozšířené tabulky mají hodnotu dvou septetů. Jakmile narazí na znak mimo GSM-7, přepne model na počet 16bitových jednotek. Pro jeden segment používá limity 160/70 a pro vícedílné zprávy 153/67. CSV s osmi testovacími vzorky a zdrojový skript přikládám k redakčnímu balíčku.

Zdroje

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít publikovat svůj obsah. To nejlepší se může zobrazit i na hlavní stránce Seznam.cz