GSM-7 vs UCS-2: miksi yksi emoji kaksinkertaistaa SMS-laskusi

Yksi emoji voi huomaamatta kaksinkertaistaa tai kolminkertaistaa SMS-laskun. GSM 03.38 määrittelee kaksi koodausta 140 tavun hyötykuormalle: tiivis GSM-7 160 merkillä tai UCS-2 70 merkillä. Mikä tahansa GSM-7-aakkoston ulkopuolinen merkki pakottaa koko viestin UCS-2:een. Kehittäjät ja markkinoijat, jotka liittävät tekstiä tekstinkäsittelyohjelmista, huomaavat tämän usein vasta laskujen saapuessa.

GSM-7-pakkaus: 160 merkkiä 140 tavun hyötykuormassa

SMS suunniteltiin kiinteän 140 tavun käyttäjätietohyötykuorman ympärille. GSM 03.38 määrittelee 7-bittisen oletusaakkoston, jotta nuo 140 tavua voivat sisältää 160 septettiä: 140 kertaa 8 jaettuna 7:llä on 160. Kun viesti pysyy kokonaan kyseisen aakkoston sisällä, laite ja SMSC käsittelevät sen yhtenä segmenttinä enintään 160 merkillä. Perusjoukko kattaa isot ja pienet latinalaiset kirjaimet, numerot, yleiset välimerkit sekä kourallisen valuutta- ja kansallissymboleja. Välilyönnit, rivinvaihdot ja tavalliset englanninkielisen proosan merkit mahtuvat ilman rangaistusta.

Ketjutus muuttaa laskutoimituksen. Moniosaiset viestit lisäävät User Data Headerin, jotta vastaanottava laite voi koota segmentit järjestykseen. Tyypillinen 6 tavun UDH kuluttaa septettitilaa jättäen 153 käyttökelpoista merkkiä per segmentti GSM-7:ssä. Laskutus on lähes aina per segmentti, ei per looginen viesti, joten 200 merkin GSM-7-runko tulee kahdeksi laskutettavaksi segmentiksi (153 ja jäännös). 160 vs. 153 -jaon ymmärtäminen on ensimmäinen askel kustannusten ennustamisessa ennen lähettämistä.

Laajennustaulukko: merkit, jotka maksavat jo kaksi septettiä

GSM 03.38 määrittelee myös laajennustaulun, johon päästään erillisellä vaihtoseptetillä. Merkit, kuten hakasulkeet [ ], aaltosulkeet { }, sirkumfleksi ^, tilde ~, pystyviiva |, kenoviiva \ ja euromerkki, eivät kuulu perusjoukkoon. Kukin niistä koodataan vaihtomerkillä ja laajennuskoodipisteellä, joten kukin kuluttaa kaksi 160:stä (tai 153:sta) käytettävissä olevasta septetistä. Näytöllä lyhyeltä näyttävä viesti voi siksi ylittää segmenttirajan aiemmin kuin naiivi merkkilaskenta antaisi olettaa.

Escape-mekanismi on yhä GSM-7; se ei siirrä viestiä UCS-2:een. Tuo ero on tärkeä. Voit sisällyttää muutaman euron tai sulkeet ja pysyä tehokkaassa 7-bittisessä pakkauksessa. Vasta kun koodain kohtaa koodipisteen, jota ei ole perusaakkostossa eikä laajennustaulukossa, koko viesti poistuu GSM-7:stä. Siihen asti jokainen merkki, mukaan lukien kaksinkertaiset laajennusmerkit, lasketaan edelleen septetteinä 160 tai 153 rajan mukaan.

MerkkiluokkaKulutetut septetit GSM-7:ssä
Perusaakkosto (A-Z, a-z, 0-9, yleiset välimerkit)1
Laajennustaulu ([ ] { } ^ ~ | \ ja euro)2 (vaihto + koodi)
Kaikki GSM 03.38:n ulkopuolella (emoji, käyrät lainausmerkit, useimmat ei-latinalaiset)Pakottaa koko viestin UCS-2:een

UCS-2-varareitti: yksi aakkoston ulkopuolinen merkki koodaa kaiken uudelleen

Heti kun jotain merkkiä ei voi esittää GSM-7:ssä, koodain vaihtaa koko käyttäjätiedon 16-bittiseen UCS-2:een (käytännössä UTF-16-koodiyksiköt BMP:lle). Sama 140 tavun hyötykuorma sisältää tällöin vain 70 merkkiä. Ketjutus-UDH:n kanssa käyttökelpoinen pituus putoaa 67 merkkiin per segmentti. Osittaista varareittiä ei ole: yksittäinen emoji, älykäs lainausmerkki, en-viiva tai merkki arabiasta, kyrillisestä, CJK:sta tai useimmista muista kirjoitusjärjestelmistä kirjoittaa koko rungon uudelleen. 140 merkin englanninkielinen lause, joka oli yksi GSM-7-segmentti, muuttuu kolmeksi UCS-2-segmentiksi, kun hymyilevä naama lisätään.

Tämä on yllätyslaskun taustalla oleva mekanismi. Markkinoijat luonnostelevat usein tekstiä tekstinkäsittelyohjelmassa, liittävät sen SMS-työkaluun ja tuovat tietämättään käyriä lainausmerkkejä tai sitovia välilyöntejä. Kehittäjät, jotka upottavat käyttäjän tuottamia nimiä tai tuotteen otsikoita, voivat syöttää saman näkymättömän laukaisimen. Koska uudelleenkoodaus on kaikki tai ei mitään, segmenttien määrä hyppää epäjatkuvasti. Laskutus moninkertaistuu uuden segmenttimäärän mukaan. Julkaistut kokonaishinnat kuten US $0.0125 per viesti, hinnoilla alkaen $0.004 149 maassa, tekevät laskutoimituksesta konkreettisen: jokainen ylimääräinen segmentti on uusi täysi veloitus, ei murto-osa.

KoodausYhden segmentin rajaKetjutetun segmentin raja
GSM-7 (7-bittinen)160 merkkiä153 merkkiä
UCS-2 (16-bittinen)70 merkkiä67 merkkiä

Näkymättömät ansat ja kirjoitusjärjestelmät, jotka pakottavat UCS-2:een

Tekstinkäsittelyohjelmat korvaavat rutiininomaisesti suorat heittomerkit ja lainausmerkit käyrillä typografisilla muodoilla, muuttavat kaksoisviivat em-viivoiksi ja lisäävät sitovia välilyöntejä. Yksikään näistä koodipisteistä ei kuulu GSM 03.38:aan. Viesti, joka näyttää näytöllä identtisen puhtaan ASCII-version kanssa, voi siksi kulkea UCS-2:na ja maksaa useita segmenttejä. Sama koskee verkosta tai suunnittelutyökaluista kopioitua sisältöä, joka suosii rikkaampaa Unicodea. Todellisten koodipisteiden tarkistaminen, ei renderöityjen glyfien, on ainoa luotettava puolustus.

Kielen valinta on yhtä ratkaisevaa. Puhdas englanti, perusranska, saksa, espanja ja vastaavat latinalaisen kirjoitusjärjestelmän viestit pysyvät yleensä GSM-7:ssä, jos oletusaakkoston ulkopuolisia aksentillisia kirjaimia vältetään tai translitteroidaan. Kreikalla, kyrillisellä, arabialla, heprealla, devanagarilla, thain kielellä ja CJK-perheellä ei ole GSM-7-kartoitusta tavallisille kirjaimille, joten näiden kirjoitusjärjestelmien olennainen käyttö pakottaa UCS-2:n koko viestille. Jopa yksittäinen nimi tai tuotesana niissä riittää. Kaikenlaiset emojit ovat määritelmän mukaan GSM-7:n ulkopuolella. Käytännön sääntö on yksinkertainen: jos merkki ei ole GSM 03.38:n perus- tai laajennusjoukossa, koko hyötykuorma muuttuu 70/67:ksi.

Käytännön korjaukset ennen lähettämistä

Translitteraatio pitää viestit GSM-7:ssä ortografisen uskollisuuden kustannuksella. Aksentillisten merkkien korvaaminen lähimmillä ASCII-vastineilla, käyrien lainausmerkkien muuttaminen suoriksi ja em-viivojen kartoittaminen takaisin yhdysviivoiksi palauttaa usein 160/153-rajat. Brändinimille tai lakitekstille, jonka on pysyttävä tarkkana, hyväksy UCS-2 ja budjetoi korkeampi segmenttimäärä. Automaattiset esilentotarkistukset, jotka skannaavat ei-GSM-7-koodipisteitä ja raportoivat tuloksena olevan segmenttimäärän molemmissa koodauksissa, antavat kehittäjille ja markkinoijille selkeän kustannussignaalin ennen viestin lähettämistä SMSC:lle.

Malleja rakentaessa pidä muuttujakentät tarkkailussa: asiakkaan nimi toisessa kirjoitusjärjestelmässä tai emoji-sisältävä tuotteen otsikko voi huomaamatta kääntää muuten GSM-7-mallin. Puhdista tai normalisoi leikepöytäpuskurit muotoillun tekstin lähteistä. Suosi suoria ASCII-välimerkkejä SMS:lle tarkoitetussa markkinointitekstissä. Jos sinun on lähetettävä emoji tai ei-latinalaista tekstiä, suunnittele runko niin, että UCS-2-segmenttirajat osuvat luonnollisiin fraasikatkoihin ja pidä kokonaispituus mahdollisimman harvoissa 67 merkin paloissa. Segmenttitietoiset pituuslaskurit, jotka vaihtavat näyttöä 160/153 ja 70/67 välillä havaitun aakkoston mukaan, poistavat suurimman osan yllätyksestä. Hinnat vaihtelevat operaattorin ja reitin mukaan; aiemmin mainitut julkaistut luvut havainnollistavat per-segmentti-mallia eivätkä yleistä tariffia. Epävarmuus reunamerkkien tarkasta renderöitymisestä laitteissa säilyy, joten testaa edustavilla laitteilla, kun viesti on tärkeä.

Usein kysyttyä

Miksi yhden emojin lisäys muuttaa SMS:ni useiksi viesteiksi?
Mikä tahansa merkki GSM 03.38 -aakkoston ulkopuolelta, mukaan lukien jokainen emoji, pakottaa koko viestin GSM-7:stä UCS-2:een. 140-tavun hyötykuorma sisältää tällöin 70 merkkiä 160:n sijaan (67 153:n sijaan ketjutettuna). Yhteen GSM-7-segmenttiin mahtunut runko voi siksi muuttua kahdeksi tai kolmeksi UCS-2-segmentiksi, ja laskutus veloittaa per segmentti.
Muuttavatko käyrät lainausmerkit ja em-viivat todella SMS-koodausta?
Kyllä. Typografiset käyrät lainausmerkit, em-viivat, en-viivat ja sitovat välilyönnit eivät kuulu GSM-7:n perus- tai laajennusjoukkoihin. Niiden liittäminen tekstinkäsittelystä koodaa koko viestin UCS-2:ksi, tiputtaen per segmentti -rajan 160/153:sta 70/67:ään vaikka teksti näyttää ruudulla samalta.
Kuinka monta merkkiä mahtuu ketjutettuun SMS:ään GSM-7:ssä verrattuna UCS-2:een?
GSM-7:ssä ketjutettu segmentti sisältää 153 merkkiä tyypillisen 6-tavuisen UDH:n jälkeen. UCS-2:ssa sama otsake jättää 67 merkkiä per segmentti. Yksittäissegmentin rajat ovat 160 GSM-7:lle ja 70 UCS-2:lle. Segmenttien määrä, ei loogisten viestien määrä, määrää kustannuksen.

Aiheeseen liittyvää