2009-03-27 4 views
1

У меня возникли проблемы с SMS-сообщением, которое я отправляю с помощью провайдера под названием Cymba.Кодирование £ в SMS-сообщении, отправленном через шлюз, не работает правильно

В основном я отправляю сообщение на них в соответствии с их спецификациями. URL-адрес закодирован.

Однако, когда сообщение посылается на мой телефону £ появляется с А впереди т.е.^А

Теперь C# строки Unicode по умолчанию, поэтому я перешел на кодировку ASCII и £ наезжает, как?.

Я попытался преобразовать строку сообщения в шестнадцатеричный, начиная с Unicode и ASCII-версий (так как через этот шлюз вы также отправляете сообщение как шестнадцатеричный). Однако такое же поведение происходит.

Я подозреваю, что это что-то делать со строкой кодирования как SMS поддерживает формат кодирования 7bit: GSM 03,38

Подозреваю также, что если я посылаю через Unicode я только получаю сообщение с 70 или 140 обугленного вместо стандарта 160.

Я совершенно новый для отправки SMS, поэтому любая помощь или совет будут оценены.

Итак, вопрос в том, как я могу получить свои строки C# в этом формате?

Обновление: Похоже, что шлюз - это тот, у кого проблема не в моем коде, поскольку я пытался заменить оскорбительное £ на 7-битное эквивалентное шестнадцатеричное значение, и это тоже не сработало. Ниже мой тестовый код, который может помочь другим в будущем:

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"); ; 
} 

ответ

2

Там в таблице GSM 03.38 to Unicode отображения доступна, который предполагает, что £ должен быть закодирован как 0x01, так что вы можете попробовать, что (только жесткое кодирование это за одну попытку). Однако вы должны действительно проверить все это с помощью оператора шлюза. Является ли шлюз искренне ожидающим, что вы опубликуете в GSM 03.38 с кодировкой URL? Если это так, то эта таблица сопоставления, вероятно, подходит для вас - вам может понадобиться написать собственную реализацию для сопоставления строки с байтами (полное выполнение System.Text.Encoding будет излишним). Сначала я попробую его с жестко закодированным сообщением.

+0

Сделав несколько экспериментов я решил принять ваш ответ как уйдя усилие тестирования отправки 7bit закодированным сообщения Я нашел шлюз является один с проблемой. Поэтому ваш ответ ближе всего к решению. –

1

This page содержит информацию о "7-bit default alphabet".

Простейшим решением может быть создание Словаря, который отображает кодовые точки Юникода, закодированные стандартом GSM 03.38 (приблизительно 140 глифов), в 1 или 2 байта (для пар 0x27, 0x ?? необходимо 2 байта).

Как только это будет сделано (в зависимости от вашего провайдера), вы также можете сжать 8-битные байты в поток из 7-битных последовательностей. Здесь есть visual sample.

И после того, как вы достигли всего этого (и имели пару сортов пива!), Вы можете превратить его в реализацию System.Text.Encoding.


Вы также можете захотеть взглянуть на PDUDecoder на CodeProject для обратной операции. Есть также онлайн-версия.

Смежные вопросы