2011-06-08 211 views
3

我想通過SMPP(JSMPP庫)發送短消息iwth unicode字符。我知道數據編碼必須爲8。&短信長度爲70個字符。但是當我嘗試這些時,我會收到帶有中文符號的短信。這裏是我的代碼:通過SMPP發送Unicode短消息

ESMClass esmClass = new ESMClass(); 
GeneralDataCoding coding = new GeneralDataCoding(8) 
String text = "üöğçşə ƏIÖĞŞÇÜ"; 
String p = HexUtil.convertStringToHexString(text); 
byte[] textByte = HexUtil.convertHexStringToBytes(p); 

String messageId = session.submitShortMessage("CMT",TypeOfNumber.INTERNATIONAL, 
        NumberingPlanIndicator.UNKNOWN,"1111", TypeOfNumber.INTERNATIONAL, 
        NumberingPlanIndicator.UNKNOWN, "phone_number", esmClass, 
        (byte) 0, (byte) 1, timeFormatter.format(new Date()), null, 
        new RegisteredDelivery(SMSCDeliveryReceipt.DEFAULT), 
        (byte) 0, coding, (byte) 0, textByte); 

在此之後,我收到帶有中文符號的消息。哪裏不對?

+0

問題解決了。問題是HexUtil沒有正確地爲unicode轉換字符串。對於此使用代碼從這裏: http://en.wikipedia.org/wiki/List_of_Unicode_characters – totali 2011-06-08 10:06:37

+0

你可以請你自己回答這個問題,然後接受答案?另外,如果他們解決了您的問題,則需要接受以前問題的答案。 – Zecas 2012-05-16 15:37:28

回答

2

不要將字符串轉換爲十六進制字符串&使用這種數據,而不是編碼的是:

GeneralDataCoding dataCoding = new GeneralDataCoding(false, true, MessageClass.CLASS1, Alphabet.ALPHA_UCS2); 

獲取字節:

byte[] textByte = text.getBytes("UTF-16BE"); 

此樣品給你發送短信與此charset UCS2。

3

應該

byte[] textByte = text.getBytes("UTF-16BE"); 

HexUtil是這裏的紅鯡魚。