0

jSMPP から UniCode SMS を受信したいです。

Data Coding が 8 なら Unicode 記号に変換したい。

このために、HexUtil.convertBytesToHexString関数を使用します。

しかし、それは正しく変換されません。この文字列を変換するにはどうすればよいですか?

        @Override
    public void onAcceptDeliverSm(DeliverSm arg0)
            throws ProcessRequestException {
        if (MessageType.SMSC_DEL_RECEIPT.containedIn(arg0.getEsmClass())) {
            // Deliver SM
        } else {
            byte[] data = arg0.getShortMessage();
            String text = null;

            if (arg0.getShortMessage() != null) {
                if (arg0.getDataCoding() == (byte) 8) {
                    text = HexUtil.convertBytesToHexString(data, 0,
                            data.length);
                } else {
                    text = new String(data);
                }
            }

                    System.out.println("Text -> " + text);
        }
    }
4

1 に答える 1

1

この方法を試してください(独自のエンコーディング検出を使用してください):

        if (msg.getEncoding().equals(Message.MessageEncodings.ENC7BIT)) {
            text = msg.getText();
        } else if (msg.getEncoding().equals(Message.MessageEncodings.ENCUCS2)) {
            try {
                text = new String(msg.getText().getBytes(), "UTF-16");
            } catch (Exception ex) {
                Logger.getLogger("smpp").error("Can't parce USC2 text: " + msg.getText() + ", " + ex.getMessage());
            }
        }

また、UTF-16が正しく表示されない場合は、UTF-16LE、UTF-16BEエンコーディングを試すこともできます

于 2012-09-27T06:41:23.450 に答える