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?
2 odpowiedzi
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.
Powinno być
byte[] textByte = text.getBytes("UTF-16BE");
HexUtil
to tutaj czerwony śledź.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].