我正在尝试开发一个smsc模拟器,该模拟器将deliver_sm发送到网关。现在我已经能够成功地将delivery_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, "");
}

最佳答案

你需要设置

submitSM.setDataCoding((byte)(0x08)); // UCS-2
submitSM.setShortMessage( MessageStr, "UTF-16" );

08-04 07:03