Chcę wysłać sms ze znakami Unicode przez SMPP (biblioteka JSMPP). Wiem, że kodowanie danych musi wynosić 8, a długość sms to 70 znaków. Ale kiedy tego próbuję, otrzymuję SMS-y z chińskimi symbolami. Oto mój kod:

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

Po tym otrzymuję wiadomość z chińskimi symbolami. Co jest nie tak?

3
totali 8 czerwiec 2011, 13:41
Problem jest rozwiązany. Problem polega na tym, że HexUtil nie konwertuje poprawnie ciągu znaków dla Unicode. W tym celu użyj kodu stąd : en.wikipedia.org/wiki/List_of_Unicode_characters
 – 
totali
8 czerwiec 2011, 14:06
Czy możesz sam odpowiedzieć na pytanie, a następnie zaakceptować tę odpowiedź? Musisz także zaakceptować odpowiedzi na poprzednie pytania, jeśli rozwiążą one Twój problem.
 – 
Zecas
16 maj 2012, 19:37

2 odpowiedzi

Najlepsza odpowiedź

Nie konwertuj ciągu na ciąg szesnastkowy i zamiast tego używaj tego kodowania danych:

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

Pobierz bajty:

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

Ten przykład pozwala wysłać sms z tym zestawem znaków UCS2.

2
totali 7 kwiecień 2014, 14:36

Powinno być

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

HexUtil to tutaj czerwony śledź.

3
artbristol 13 czerwiec 2012, 12:40