Мне нужно было уменьшить максимальный размер сообщения с 153 до 67 и использовать DATA_CODING = (byte) 0x08 и Data.ENC_UTF16.

ользую библиотеку open-smpp для связи с SMSC. Я могу отправлять как одиночные, так и множественные SMS-сообщения, однако у меня возникли проблемы со специальными символами (šđžć), которые в случае отправки нескольких сообщений (sendMultiSMS) отображаются как «?».

Я читаю вhttps://en.wikipedia.org/wiki/Short_Message_Peer-to-Peerэтот текст в поле short_message должен соответствовать data_coding.

PSB, кодовые части двух методов. Согласно приведенному выше вики-ресурсу, я определил переменнуюdata_coding который представляет data_coding, и я попытался закодировать текст в short_message следующим образом:submitSM.setShortMessage (message.getMessage (), Data.ENC_UTF16); - одно сообщениеed.appendString (messageAux, Data.ENC_UTF16); - мульти-сообщение

Таким образом, для одиночного сообщения подойдет нижняя комбинация (DATA_CODING = (byte) 0x08 и Data.ENC_UTF16), символы идут хорошо, но для мульти-смс специальные символы появляются как '?'.

Я перепробовал все комбинации, такие как:
DATA_CODING = (байт) 0x01 и Data.ENC_UTF16
DATA_CODING = (байт) 0x08 и Data.ENC_UTF16
DATA_CODING = (байт) 0x01 и Data.ENC_UTF8
DATA_CODING = (байт) 0x08 и Data.ENC_UTF8
и т.д., но безуспешно.

**private static final byte DATA_CODING = (byte) 0x08;**

public void sendSMS(XMessage message) throws SmppException
{ 
    .
    .
    .
    SubmitSM submitSM = new SubmitSM();
    setScheduleDate(message, submitSM);
    submitSM.setProtocolId(PROTOCOL_ID);
    **submitSM.setDataCoding(DATA_CODING);**
    submitSM.setSourceAddr(mSrcAddress);
    submitSM.setDestAddr(mDestAddress);
    submitSM.setSequenceNumber(message.getSequence());
    **submitSM.setShortMessage(message.getMessage(), Data.ENC_UTF16);**
    SubmitSMResp submitSMResp = mSession.submit(submitSM);
}

public void sendMultiSMS(XMessage message) throws SmppException
{
    .
    .
    .
    submitSMMulti = new SubmitSM();
    submitSMMulti.setProtocolId(PROTOCOL_ID);
    **submitSMMulti.setDataCoding(DATA_CODING);**
    setScheduleDate(message, submitSMMulti);
    submitSMMulti.setSourceAddr(mSrcAddress);
    submitSMMulti.setDestAddr(mDestAddress);
    submitSMMulti.setEsmClass((byte)0x40);

    messageArray = XSMSProcessUtil.getMultiMessages(message.getMessage(), numSegments);
    SubmitSMResp submitSMResp = null;
    for(int count = 0; count < messageArray.length; count++)
    {
        submitSMMulti.setSequenceNumber(message.getSequence() + count);
        messageAux = messageArray[count];
        ByteBuffer ed = new ByteBuffer();
        ed.appendByte((byte)5);
        ed.appendByte((byte)0x00);
        ed.appendByte((byte)3);
        ed.appendByte((byte)message.getSequence());
        ed.appendByte((byte)numSegments);
        ed.appendByte((byte)(count +1));
        **ed.appendString(messageAux, Data.ENC_UTF16);**
        submitSMMulti.setShortMessageData(ed);
        submitSMResp = mSession.submit(submitSMMulti);
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос