2009-03-27 7 views
1

Ich habe Probleme mit einer SMS-Nachricht, die ich zu senden bin mit einem Anbieter namens Cymba.Encoding £ in SMS-Nachricht über Gateway gesendet funktioniert nicht richtig

Grundsätzlich Ich poste die Nachricht zu ihnen nach ihren Spezifikationen URL codiert.

jedoch, wenn die Nachricht auf mein Handy geschickt wird das £ erscheint mit einem A vor d £

Jetzt C# Strings Unicode standardmäßig sind, so wechselte ich zu ASCII-Kodierung und die £ kommt über wie?.

Ich habe versucht, den Nachrichtenstring in hex zu konvertieren, beginnend mit der Unicode- und der ASCII-Version (da über dieses Gateway auch die Nachricht als hex gesendet wird). Das gleiche Verhalten tritt jedoch auf.

Ich vermute, es ist etwas, mit der String-Codierung als SMS zu tun, unterstützt ein 7-Bit-Format codiert ist: GSM 03.38

Ich vermute, dass auch wenn ich über Unicode senden werde ich nur 70 oder 140 Zeichen Nachricht erhalten statt die Standard-160

bin ich ganz neu in SMS wird so jede Hilfe oder Beratung Senden geschätzt.

Die Frage ist also, wie kann ich meine C# Strings in diesem Format erhalten?

Update: Sieht aus wie das Gateway ist das mit dem Problem nicht mein Code, wie ich versuchte, die beleidigende £ mit dem 7bit äquivalenten Hex-Wert zu ersetzen und das hat auch nicht funktioniert. Siehe unten für meinen Test-Code, der anderen in Zukunft helfen kann:

byte pound = 0xA3; 
byte GSMPound = 0x01; 
string hexxedMsg = ""; 
System.Text.UnicodeEncoding encoder = new System.Text.UnicodeEncoding(); 
byte[] msgBytes = encoder.GetBytes(message); 

foreach (byte byt in msgBytes) 
{ 
    if(byt == pound) 
     hexxedMsg += GSMPound.ToString("X"); 
    else 
     hexxedMsg += byt.ToString("X2"); ; 
} 

Antwort

2

Es gibt eine GSM 03.38 to Unicode Zuordnungstabelle zur Verfügung, die schlägt vor, dass £ als 0x01 codiert werden soll, so dass Sie, dass (nur Hartcodierung es für einen einzigen Versuch, könnten versuchen,). Sie sollten dies jedoch wirklich mit dem Gateway-Betreiber überprüfen. Erwartet das Gateway wirklich, dass Sie im URL-codierten GSM 03.38 posten? Wenn dies der Fall ist, ist diese Mapping-Tabelle wahrscheinlich der Weg - Sie müssen möglicherweise Ihre eigene Implementierung schreiben, um von einer Zeichenkette in Bytes zu mappen (die vollständige Implementierung System.Text.Encoding wäre übertrieben). Ich würde es aber zuerst mit einer hart codierten Nachricht versuchen.

+0

getan zu haben einige Experimente habe ich beschlossen, die Antwort zu akzeptieren, wie um den Aufwand der Prüfung gegangen eines 7-Bit-codierten Nachricht zu senden habe ich festgestellt das Gateway ist die eins mit dem Problem. Ihre Antwort ist also der Lösung am nächsten. –

1

This page enthält Informationen über die "7-bit default alphabet". Die einfachste Lösung könnte darin bestehen, ein Dictionary zu erstellen, das die Unicode-Codepunkte, die vom GSM 03.38-Standard (etwa 140 Glyphen) codiert sind, in 1 oder 2 Bytes (2 Bytes für die 0x27, 0x ?? -Paare) abbildet.

Sobald dies erledigt ist (abhängig von Ihrem Provider) müssen Sie möglicherweise auch die 8-Bit-Bytes in einen Strom von 7-Bit-Sequenzen drücken. Es gibt eine visual sample hier.

Und nachdem Sie all das erreicht haben (und ein paar Bier hatten!), Möchten Sie vielleicht eine System.Text.Encoding-Implementierung daraus machen.


Vielleicht möchten Sie auch einen Blick auf PDUDecoder auf Codeproject für den Rückwärtsbetrieb haben. Es gibt auch eine Online-Version.