У меня проблемы с отправкой SMS-сообщения через провайдера Cymba.
По сути, я отправляю им сообщение в соответствии с их спецификацией URL в кодировке.
Однако, когда сообщение отправляется на мой телефон, появляется знак £ с буквой A, т. Е. £ A
Теперь строки C # по умолчанию являются Unicode, поэтому я перешел на кодировку ASCII, и символ £ появляется как?.
Я попытался преобразовать строку сообщения в шестнадцатеричный формат, начиная с версий Unicode и ASCII (так как через этот шлюз вы также можете отправить сообщение в шестнадцатеричном виде). Однако происходит то же самое поведение.
Я подозреваю, что это связано с кодировкой строки, так как SMS поддерживает 7-битный формат кодирования: 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"); ;
}