GSM 03.38

Es gibt drei verschiedene Möglichkeiten, Texte und Daten in einer GSM-Kurznachricht mit einer maximalen Nutzdatenmenge von 1120 Bit zu kodieren:

7 Bit, 160 Zeichen
gemäß Standard GSM 03.38, ugs. GSM-Alphabet. Für SMS-Textnachrichten, bei denen ein begrenzter Zeichenvorrat zur Darstellung ausreichend ist. Der Text kann pro Nachricht bis zu 160 Zeichen enthalten (7 Bit/Zeichen × 160 Zeichen = 1.120 Bit). Jeweils 7 Bit werden als ein Zeichen interpretiert, was den Vorrat an darstellbaren Zeichen grundsätzlich auf 128 beschränkt. Diese 128 Zeichen sind im 7-Bit-Basiszeichensatz festgelegt[1]. Es existieren mehrere Mechanismen, mit denen der Vorrat an darstellbaren Zeichen erweitert werden kann[2]:
  • Escape: Durch das Escape-Zeichen (ESC, 0x1B) wird für die Anzeige des direkt folgenden Zeichens einmalig die Standardzeichensatzerweiterung herangezogen.
  • Escape mit Single Shift: Durch ein Element im User Data Header der Nachricht kann anstatt der Standardzeichensatzerweiterung eine alternative Zeichensatzerweiterung ausgewählt werden.
  • Locking Shift: Durch ein weiteres Element im User Data Header der Nachricht kann anstatt des Basiszeichensatzes ein alternativer Zeichensatz ausgewählt werden.
8 Bit, 140 Zeichen
Für Datennachrichten (binäre Inhalte), wie etwa Logos, Bildmitteilungen, Klingeltöne. Eine 8-Bit-Nachricht kann bis zu 140 Zeichen enthalten (8 Bit/Zeichen × 140 Zeichen = 1.120 Bit).
16 Bit, 70 Zeichen
Unicode UCS2, d. h. auf BMP (Basic Multilingual Plane) beschränktes UTF-16. Unicode-Nachrichten werden für alle nicht direkt unterstützten Schriftsysteme benötigt, z. B. Arabisch, Hebräisch, Kyrillisch und Lateinisch mit anderen Sonderzeichen. Eine Unicode-Nachricht ist begrenzt auf 70 Zeichen (16 Bit/Zeichen × 70 Zeichen = 1.120 Bit).

7 Bit

Die Zeichensatzerweiterungstabellen für 7-Bit-Nachrichten sind üblicherweise so gestaltet, dass auf Endgeräten, die nicht über diese Tabellen verfügen und daher das Zeichen der Basistabelle darstellen, möglichst ähnlich aussehende Ergebnisse erzeugt werden, z. B. „e“ statt „€“.

Es existieren Single-Shift-Zeichensatzerweiterungstabellen für Türkisch, Spanisch, Portugiesisch, Bengali, Gujarati, Hindi, Kannada, Malayalam, Oriya, Punjabi, Tamil, Telugu sowie Urdu.

Es existieren Locking-Shift-Zeichensatztabellen für Türkisch, Portugiesisch, Bengali, Gujarati, Hindi, Kannada, Malayalam, Oriya, Punjabi, Tamil, Telugu sowie Urdu.

Die Mechanismen Single Shift und Locking Shift können miteinander kombiniert werden.

Beispiele:

  • 16 Bit: 0x0637 ergibt das arabische Zeichen Tah: „ط“
  • 7 Bit: 0x65 ergibt ein „e“
  • 7 Bit mit Escape: 0x1B gefolgt von 0x65 ergibt ein Eurozeichen „€“
  • 7 Bit mit Single Shift: bei Einstellung 'Türkisch' ergibt 0x1B gefolgt von 0x53 ein S mit Cedille „Ş“
  • 7 Bit mit Locking Shift: bei Einstellung 'Türkisch' ergibt 0x1C ein S mit Cedille „Ş“

Zeichensatztabellen

Basiszeichensatz
 0x000x100x200x300x400x500x600x70
0x00@ΔSP⁴0¡P¿p
0x01£_!1AQaq
0x02$Φ"2BRbr
0x03¥Γ#3CScs
0x04èΛ¤4DTdt
0x05éΩ%5EUeu
0x06ùΠ&6FVfv
0x07ìΨ'7GWgw
0x08òΣ(8HXhx
0x09ÇΘ)9IYiy
0x0ALF¹Ξ*:JZjz
0x0BØESC³+;KÄkä
0x0CøÆ,<LÖlö
0x0DCR²æ-=MÑmñ
0x0EÅß.>NÜnü
0x0FåÉ/?O§oà

¹ ist ein Zeilenvorschub (LF, Linefeed)
² ist ein Wagenrücklauf (CR, Carriage Return)
³ ist ein Escape-Zeichen (ESC)
⁴ ist ein Leerzeichen (SP, Space)

Standardzeichensatzerweiterung
 0x000x100x200x300x400x500x600x70
0x00    |   
0x01        
0x02        
0x03        
0x04 ^      
0x05       
0x06        
0x07        
0x08  {     
0x09  }     
0x0AFF¹       
0x0B SS2²      
0x0C   [    
0x0D   ~    
0x0E   ]    
0x0F  \     

¹ ist ein Seitenumbruch (FF, Form Feed oder Page Break)
² ist ein weiteres Single-Shift-Escape-Zeichen, reserviert für zukünftige Erweiterungen

Locking Shift Zeichentabelle Türkisch
 0x000x100x200x300x400x500x600x70
0x00@Δ0İPçp
0x01£_!1AQaq
0x02$Φ"2BRbr
0x03¥Γ#3CScs
0x04Λ¤4DTdt
0x05éΩ%5EUeu
0x06ùΠ&6FVfv
0x07ıΨ'7GWgw
0x08òΣ(8HXhx
0x09ÇΘ)9IYiy
0x0A¹Ξ*:JZjz
0x0Bг+;KÄkä
0x0CğŞ,<LÖlö
0x0D²ş-=MÑmñ
0x0EÅß.>NÜnü
0x0FåÉ/?O§oà

¹ ist ein Zeilenvorschub (LF, Linefeed)
² ist ein Wagenrücklauf (CR, Carriage Return)
³ ist ein ESC
⁴ ist ein Leerzeichen

Single Shift Zeichentabelle Türkisch
 0x000x100x200x300x400x500x600x70
0x00    |   
0x01        
0x02        
0x03     Şçş
0x04 ^      
0x05       
0x06        
0x07    Ğ ğ 
0x08  {     
0x09  } İ ı 
0x0A¹       
0x0B ²      
0x0C   [    
0x0D³  ~    
0x0E   ]    
0x0F  \     

¹ ist ein Seitenumbruch (Page Break)
² ist ein ESC
³ ist ein Steuerzeichen. An dieser Stelle soll kein sprachspezifisches Zeichen kodiert werden.

Locking Shift Zeichentabelle Portugiesisch
 0x000x100x200x300x400x500x600x70
0x00@*0ÍP~p
0x01£_!1AQaq
0x02$ª"2BRbr
0x03¥Ç#3CScs
0x04êÀº4DTdt
0x05é%5EUeu
0x06ú^&6FVfv
0x07í\'7GWgw
0x08ó(8HXhx
0x09çÓ)9IYiy
0x0A¹|*:JZjz
0x0BÔ³+;KÃkã
0x0CôÂ,<LÕlõ
0x0D²â-=MÚm`
0x0EÁÊ.>NÜnü
0x0FáÉ/?O§oà

¹ ist ein Zeilenvorschub (LF, Linefeed)
² ist ein Wagenrücklauf (CR, Carriage Return)
³ ist ein ESC
⁴ ist ein Leerzeichen

Single Shift Zeichentabelle Portugiesisch
 0x000x100x200x300x400x500x600x70
0x00    |   
0x01    À Â 
0x02 Φ      
0x03 Γ      
0x04 ^      
0x05êΩ   Úú
0x06 Π      
0x07 Ψ      
0x08 Σ{     
0x09çΘ} Í í 
0x0A¹       
0x0BÔ²   Ã ã
0x0Cô  [ Õ õ
0x0D³  ~    
0x0EÁ  ]    
0x0FáÊ\ Ó óâ

¹ ist ein Seitenumbruch (Page Break)
² ist ein ESC
³ ist ein Steuerzeichen. An dieser Stelle soll kein sprachspezifisches Zeichen kodiert werden.

Locking Shift Zeichentabelle Hindi
 0x000x100x200x300x400x500x600x70
0x000p
0x01!1िaq
0x022br
0x033cs
0x044dt
0x055eu
0x066fv
0x077gw
0x08)8hx
0x09(9iy
0x0A¹:jz
0x0B³;k
0x0C,l
0x0D²m
0x0E.n
0x0F?oॿ

¹ ist ein Zeilenvorschub (LF, Linefeed)
² ist ein Wagenrücklauf (CR, Carriage Return)
³ ist ein ESC
⁴ ist ein Leerzeichen

Single Shift Zeichentabelle Hindi
 0x000x100x200x300x400x500x600x70
0x00@<ज़|P
0x01£=ड़AQ
0x02$>ढ़BR
0x03¥¡फ़CS
0x04¿^य़DT
0x05"¡EU
0x06¤_FV
0x07%#GW
0x08&*{HX
0x09'}IY
0x0A¹JZ
0x0B*³K
0x0C+क़[L
0x0D²ख़~M
0x0Eग़]N
0x0F/\O

¹ ist ein Seitenumbruch (Page Break)
² ist ein ESC
³ ist ein Steuerzeichen. An dieser Stelle soll kein sprachspezifisches Zeichen kodiert werden.

Locking Shift Zeichentabelle Bengali
 0x000x100x200x300x400x500x600x70
0x000p
0x01 !1িaq
0x02 2br
0x033cs
0x044dt
0x055 eu
0x066fv
0x077  gw
0x08)8  hx
0x09(9 iy
0x0A¹:jz
0x0B³; k
0x0C ,  lড়
0x0D²mঢ়
0x0E .n
0x0F?o

¹ ist ein Zeilenvorschub (LF, Linefeed)
² ist ein Wagenrücklauf (CR, Carriage Return)
³ ist ein ESC
⁴ ist ein Leerzeichen

Single Shift Zeichentabelle Bengali
 0x000x100x200x300x400x500x600x70
0x00@<P
0x01£=AQ
0x02$>BR
0x03¥¡CS
0x04¿^য়DT
0x05"¡EU
0x06¤_FV
0x07%#GW
0x08&*{HX
0x09'}IY
0x0A¹JZ
0x0B*²K
0x0C+[L
0x0D³~M
0x0E]N
0x0F/\O

¹ ist ein Seitenumbruch (Page Break)
² ist ein ESC
³ ist ein Steuerzeichen. An dieser Stelle soll kein sprachspezifisches Zeichen kodiert werden.

Quellen

  1. Mapping of GSM 03.38 characters to Unicode. (TXT; 9 kB) 10. November 2009, abgerufen am 18. November 2009 (englisch).
  2. 3GPP TS 23.038: Alphabets and language-specific information; Release 9.0.0. (ZIP/DOC; 174 kB) 28. September 2009, abgerufen am 16. November 2009 (englisch).