Отправить Unicode SMS через SMPP

Я хочу отправить sms с символами юникода через SMPP (библиотека JSMPP). Я знаю, что для этого кодировка данных должна быть 8, а длина смс - 70 символов. Но когда я пробую это, я получаю смс с китайскими символами. Вот мой код:

ESMClass esmClass = new ESMClass();
GeneralDataCoding coding = new GeneralDataCoding(8)
String text = "üöğçşə ƏIÖĞŞÇÜ";
String p = HexUtil.convertStringToHexString(text);
byte[] textByte = HexUtil.convertHexStringToBytes(p);

String messageId = session.submitShortMessage("CMT",TypeOfNumber.INTERNATIONAL,
                   NumberingPlanIndicator.UNKNOWN,"1111", TypeOfNumber.INTERNATIONAL,
                   NumberingPlanIndicator.UNKNOWN, "phone_number", esmClass,
                   (byte) 0, (byte) 1, timeFormatter.format(new Date()), null,
                   new RegisteredDelivery(SMSCDeliveryReceipt.DEFAULT),
                   (byte) 0, coding, (byte) 0, textByte);

После этого я получаю сообщение с китайскими символами. Что случилось?


person totali    schedule 08.06.2011    source источник
comment
Проблема решена. Проблема в том, что HexUtil неправильно преобразует строку для юникода. Для этого используйте код отсюда: en.wikipedia.org/wiki/List_of_Unicode_characters   -  person totali    schedule 08.06.2011
comment
не могли бы вы сами ответить на вопрос, а затем принять этот ответ? Кроме того, вам необходимо принять ответы на предыдущие вопросы, если они решат вашу проблему.   -  person Zecas    schedule 16.05.2012


Ответы (2)


Так должно быть

byte[] textByte = text.getBytes("UTF-16BE");

HexUtil здесь отвлекающий маневр.

person artbristol    schedule 13.06.2012

Не преобразовывайте строку в шестнадцатеричную строку и используйте эту кодировку данных вместо этой:

GeneralDataCoding dataCoding = new GeneralDataCoding(false, true, MessageClass.CLASS1, Alphabet.ALPHA_UCS2);

Получить байты:

byte[] textByte = text.getBytes("UTF-16BE");

Этот пример дает вам отправить смс с этой кодировкой UCS2.

person totali    schedule 07.04.2014