0

我正在尝试开发一个 smsc 模拟器,它将把 Deliver_sm 发送到网关。现在我可以成功地向网关发送deliver_sm请求。但是这次我需要发送Unicode字符作为按摩体。当我尝试发送Unicode字符时,网关无法识别它。它显示为无效关键字,如按摩. 现在我猜我的按摩 16 位编码不正确。这是我的代码。如果可能,请给我更正的代码。

try {

    ByteBuffer ed = new ByteBuffer();
    DeliverSM request = new DeliverSM();

    private String message="text";
    private SimulatorPDUProcessor proc;

    request.setEsmClass((byte)Data.SM_UDH_GSM); //Set UDHI Flag Data.SM_UDH_GSM=0×40
    request.setDataCoding((byte) ((byte) 0*04));

    ed.appendByte((byte) 6); // UDH Length
    ed.appendByte((byte) ((byte) 0*04)); // IE Identifier
    ed.appendByte((byte) 4); // IE Data Length
    ed.appendByte((byte) 00) ; //Reference Number 1st Octet
    ed.appendByte((byte) 00) ; //Reference Number 2nd Octet

    try {
        ed.appendString(message, Data.ENC_UTF16_BE);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    request.setShortMessage(message,Data.ENC_UTF16);

    request.setSourceAddr("sourceAdd");
    request.setDestAddr("919865851257");
    proc.serverRequest(request);

    System.out.println("Message sent.");
    try {
        generateResult(sourceAdd,"sent");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} catch (WrongLengthOfStringException e) {
    System.out.println("Message sending failed ");
    event.write(e, "");
}
4

2 回答 2

1

你需要设置

submitSM.setDataCoding((byte)(0x08)); // UCS-2
submitSM.setShortMessage( MessageStr, "UTF-16" );
于 2012-01-06T09:45:52.713 回答
0

尝试改用 UTF-8 编码。可能您需要先对数据进行实际编码。

免责声明:我不知道deliver_smAPI,但 SMS 确实使用 UTF-8。<- 我的立场是正确的,USC-16 用于不适合 7 位和 8 位编码的消息。

于 2011-09-16T03:52:44.347 回答