Не удается получить дополнительные escape-символы для работы в 7-битном алфавите GSM.

Я отправляю в SMSC, например, эту строку "[ ]", которая кодирует в байт [] в шестнадцатеричном формате "1B3C201B3E" в соответствии с 7-битным алфавитом GSM, где "1B" - это символ для дополнительных 10 символов, а 3C - это "["и 3E - это"]"соответственно, но он не будет печатать правильно на моем мобильном телефоне, который печатает" < >", потому что он печатает" 1B "как пробел и"<"=" 3C "и">"=" 3E ". Кроме того, он не может печатать какие-либо странные символы "èéùìòÇØøÅå€ÆæßÉ@¤¡ÄÖÑܧ¿äöñüà", но отлично работает с греческими символами. Это моя ошибка или это как-то связано с конкретным SMSC? Байт [] правильный или нет?

2 ответа

Вы позволяете data_coding по умолчанию (0), что означает, что вы не указываете алфавит, используемый в pdu . SMSC расшифрует его, используя настроенный по умолчанию алфавит на стороне SMSC.

В вашем случае, похоже, что SMSC не настроен на использование 7-битного GSM по умолчанию. Возможный алфавит по умолчанию - латиница (ISO-8859-1), потому что в латинице 0x3C - это "<", а 0x3E - это ">", 0x1B не печатается, поэтому переводится в пробел.

Таким образом, вы можете попытаться закодировать ваше сообщение в ISO-8859-1.

Вам нужно выбрать одну data_coding (или схему кодирования) в зависимости от типа символов, которые вам нужно использовать. На странице 136 документа спецификации протокола SMPPv4 показано, какие кодировки данных вы можете использовать.

Затем, например, если вы выберете UCS2, вы можете сделать msg.getBytes("UCS2") и установить кодирование данных на 8, и все представимые символы UCS2 будут хорошо отображаться в телефоне.

Я думаю, что если вам нужно использовать 7-битный алфавит GSM, вам нужно установить кодирование данных на 1, тогда вам нужен 7-битный кодировщик алфавита gsm, от строки к байту, я думаю, что это не доступно в стандартном jdk

Другие вопросы по тегам