2012-08-13 67 views
0

我想從jSMPP接收UniCode短信。接受UniCode短信

如果數據編碼爲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); 
     } 
    } 
+0

怎麼樣你得到你的字符串?粘貼您的代碼 – HashimR 2012-08-13 09:25:45

+0

我從DeliverSm獲取它,使用方法'getShortMessage' – totali 2012-08-13 09:56:29

回答

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-16LE,UTF-16BE編碼,如果UTF-16不要顯示正確