GSM-7 vs UCS-2: bir emoji SMS faturanızı neden ikiye katlar
Tek bir emoji SMS faturanızı sessizce ikiye veya üçe katlayabilir. GSM 03.38, 140 baytlık yük için iki kodlama tanımlar: 160 karakterlik kompakt GSM-7 veya 70 karakterlik UCS-2. GSM-7 alfabesi dışındaki herhangi bir karakter tüm mesajı UCS-2'ye zorlar. Kelime işlemcilerden metin yapıştıran geliştiriciler ve pazarlamacılar bunu çoğu zaman yalnızca faturalar gelince fark eder.
GSM-7 paketleme: 140 baytlık yükte 160 karakter
SMS, sabit 140 baytlık kullanıcı verisi yükü etrafında tasarlandı. GSM 03.38, bu 140 baytın 160 septet tutması için 7 bitlik varsayılan bir alfabe tanımlar: 140 çarpı 8 bölü 7 eşittir 160. Mesaj tamamen bu alfabenin içinde kaldığında el terminali ve SMSC onu en fazla 160 karakterlik tek bir segment olarak işler. Temel küme büyük ve küçük Latin harflerini, rakamları, yaygın noktalama işaretlerini ve birkaç para birimi ile ulusal simgeyi kapsar. Boşluklar, satır sonları ve olağan İngilizce düzyazı karakterleri ceza olmadan sığar.
Birleştirme, aritmetiği değiştirir. Çok parçalı mesajlar, alıcı cihazın segmentleri sırayla birleştirebilmesi için bir UDH ekler. Tipik 7 baytlık UDH septet alanını tüketir ve GSM-7 altında segment başına 153 kullanılabilir karakter bırakır. Faturalama neredeyse her zaman mantıksal mesaj başına değil segment başınadır; bu yüzden 200 karakterlik bir GSM-7 gövdesi iki faturalanabilir segment olur (153 artı kalan). 160'a karşı 153 ayrımını anlamak, gönder'e basmadan önce maliyeti öngörmenin ilk adımıdır.
Uzantı tablosu: zaten iki septet tutan karakterler
GSM 03.38 ayrıca özel bir kaçış septetiyle erişilen bir uzantı tablosu da tanımlar. Köşeli parantezler [ ], süslü parantezler { }, şapka ^, tilde ~, dikey çubuk |, ters eğik çizgi \ ve euro işareti gibi karakterler temel kümede yer almaz. Bunların her biri kaçış artı uzantı kod noktası olarak kodlanır; bu nedenle her biri kullanılabilir 160 (veya 153) septetten ikisini tüketir. Ekranda kısa görünen bir mesaj bu yüzden naif bir karakter sayımının düşündüğünden daha erken bir segment sınırını aşabilir.
Kaçış mekanizması hâlâ GSM-7'dir; mesajı UCS-2'ye çevirmez. Bu ayrım önemlidir. Birkaç euro veya köşeli parantez ekleyip verimli 7 bit paketlemede kalabilirsiniz. Kodlayıcı, ne temel alfabede ne de uzantı tablosunda bulunan bir kod noktasıyla karşılaştığında tüm mesaj GSM-7'yi terk eder. O ana kadar çift maliyetli uzantı karakterleri dahil her karakter hâlâ 160 veya 153 limitine karşı septet olarak sayılır.
| Karakter sınıfı | GSM-7 altında tüketilen septet |
|---|---|
| Temel alfabe (A–Z, a–z, 0–9, yaygın noktalama) | 1 |
| Uzantı tablosu ([ ] { } ^ ~ | \ ve euro) | 2 (kaçış + kod) |
| GSM 03.38 dışındaki her şey (emoji, kıvrık tırnak, çoğu Latin dışı) | Tüm mesajı UCS-2'ye zorlar |
UCS-2 geri dönüşü: alfabedışı tek karakter her şeyi yeniden kodlar
Herhangi bir karakter GSM-7'de temsil edilemediği anda kodlayıcı tüm kullanıcı verisini 16 bit UCS-2'ye (BMP için fiilen UTF-16 kod birimleri) geçirir. Aynı 140 baytlık yük o zaman yalnızca 70 karakter tutar. Birleştirme UDH'si ile kullanılabilir uzunluk segment başına 67 karaktere düşer. Kısmi geri dönüş yoktur: tek bir emoji, akıllı tırnak, en tire veya Arapça, Kiril, CJK ya da çoğu diğer yazı sisteminden bir karakter tüm gövdeyi yeniden yazar. Bir GSM-7 segmenti olan 140 karakterlik İngilizce cümle, sonuna gülen bir yüz eklenince üç UCS-2 segmenti olur.
Sürpriz faturanın arkasındaki mekanizma budur. Pazarlamacılar metni sıkça kelime işlemcide taslaklar, SMS aracına yapıştırır ve farkında olmadan kıvrık tırnak veya bölünmez boşluk ekler. Kullanıcı üretimi adları veya ürün başlıklarını araya ekleyen geliştiriciler aynı görünmez tetikleyiciyi enjekte edebilir. Yeniden kodlama hep ya da hiç olduğu için segment sayısı süreksiz atlar. Faturalama yeni segment toplamıyla çarpılır. Mesaj başına 0,0125 US $ gibi yayımlanmış hepsi dahil rakamlar ve 149 ülkede 0,004 $'dan başlayan ücretler aritmetiği somutlaştırır: her ek segment kesirli ek değil, tam bir ücrettir.
| Kodlama | Tek segment limiti | Birleştirilmiş segment limiti |
|---|---|---|
| GSM-7 (7 bit) | 160 karakter | 153 karakter |
| UCS-2 (16 bit) | 70 karakter | 67 karakter |
UCS-2'ye zorlayan görünmez tuzaklar ve yazı sistemleri
Kelime işlemciler düz kesme ve tırnak işaretlerini düzenli olarak kıvrık tipografik biçimlerle değiştirir, çift tireleri em tire yapar ve bölünmez boşluk ekler. Bu kod noktalarının hiçbiri GSM 03.38'e ait değildir. Ekranda düz ASCII sürümüyle aynı görünen bir mesaj bu yüzden UCS-2 olarak gidebilir ve birden fazla segmente mal olabilir. Zengin Unicode'u tercih eden web sayfalarından veya tasarım araçlarından kopyalanan içerik için de aynı durum geçerlidir. Görüntülenen gliflere değil gerçek kod noktalarına bakmak tek güvenilir savunmadır.
Dil seçimi de en az o kadar belirleyicidir. Saf İngilizce, temel Fransızca, Almanca, İspanyolca ve benzeri Latin yazı sistemli mesajlar, varsayılan alfabe dışındaki aksanlı harflerden kaçınılır veya çevriyazılırsa genelde GSM-7'de kalır. Yunanca, Kiril, Arapça, İbranice, Devanagari, Tay ve CJK ailesinin sıradan harfleri için GSM-7 eşlemesi yoktur; bu yazı sistemlerinin kayda değer kullanımı tüm mesajı UCS-2'ye zorlar. Bu yazı sistemlerinde tek bir ad veya ürün sözcüğü bile yeter. Her tür emoji tanım gereği GSM-7 dışındadır. Pratik kural basittir: karakter GSM 03.38 temel veya uzantı kümesinde değilse tüm yük 70/67 olur.
Göndermeden önce pratik çözümler
Çevriyazım, ortografik sadakat pahasına mesajları GSM-7'de tutar. Aksanlı karakterleri en yakın ASCII eşdeğerleriyle değiştirmek, kıvrık tırnakları düzleştirmek ve em tireleri tekrar tireye eşlemek çoğu zaman 160/153 limitlerini geri getirir. Aynen kalması gereken marka adları veya yasal metin için UCS-2'yi kabul edin ve daha yüksek segment sayısına bütçe ayırın. GSM-7 dışı kod noktalarını tarayan ve her iki kodlama altında oluşan segment toplamını bildiren otomatik ön kontrol, geliştiricilere ve pazarlamacılara mesaj SMSC'ye gönderilmeden önce net bir maliyet sinyali verir.
Şablon oluştururken değişken alanları yakından izleyin: başka bir yazı sistemindeki müşteri adı veya emoji içeren bir ürün başlığı, aksi halde GSM-7 olan bir şablonu sessizce çevirebilir. Zengin metin kaynaklarından gelen yapıştırma panolarını temizleyin veya normalleştirin. SMS'e gidecek pazarlama metninde düz ASCII noktalamayı tercih edin. Emoji veya Latin dışı metin göndermeniz gerekiyorsa gövdeyi UCS-2 segment sınırları doğal ifade kırılımlarına gelecek şekilde tasarlayın ve toplam uzunluğu mümkün olduğunca az 67 karakterlik parçada tutun. Algılanan alfabeye göre görüntüyü 160/153 ile 70/67 arasında değiştiren segment farkındalıklı uzunluk sayaçları sürprizin çoğunu ortadan kaldırır. Ücretler operatöre ve rotaya göre değişir; daha önce anılan yayımlanmış rakamlar evrensel tarife değil, segment başı modeli örnekler. Kenardaki karakterlerin el terminalinde tam olarak nasıl görüntüleneceği konusunda dürüst bir belirsizlik sürer; mesaj önemliyse temsilî cihazlarda test edin.
Sık sorulan sorular
- Neden bir emoji eklemek SMS'imi birden fazla mesaja çevirir?
- GSM 03.38 alfabesi dışındaki herhangi bir karakter, her emoji dahil, tüm mesajı GSM-7'den UCS-2'ye zorlar. 140 baytlık yük o zaman 160 yerine 70 karakter tutar (birleştirildiğinde 153 yerine 67). Bir GSM-7 segmentine sığan gövde bu nedenle iki veya üç UCS-2 segmenti olabilir ve ücretlendirme segment başına yapılır.
- Kıvrık tırnaklar ve uzun tireler gerçekten SMS kodlamasını değiştirir mi?
- Evet. Tipografik kıvrık tırnaklar, uzun tireler, en tireler ve bölünmez boşluklar GSM-7 temel veya uzantı kümelerinde yoktur. Kelime işlemciden yapıştırmak tüm mesajı UCS-2 olarak yeniden kodlar, metin ekranda değişmemiş görünse bile segment başına limiti 160/153'ten 70/67'ye düşürür.
- Birleştirilmiş SMS'te GSM-7 ile UCS-2 altında kaç karakter sığar?
- GSM-7 altında birleştirilmiş segment, tipik 7 baytlık UDH sonrası 153 karakter tutar. UCS-2 altında aynı başlık segment başına 67 karakter bırakır. Tek segment limitleri GSM-7 için 160, UCS-2 için 70'tir. Maliyeti mantıksal mesaj sayısı değil segment sayısı belirler.