2011-09-15 54 views
0

我想開發一個smsc模擬器,它將發送deliver_sm到網關。現在我可以成功發送deliver_sm請求到網關。但是這次我需要發送Unicode字符作爲按摩體。當我嘗試發送unicode字符時,網關不能識別它。它顯示爲無效的關鍵字。現在我想我的16位按摩編碼是不正確的。這裏是我的代碼。如果可能,請給我更正的代碼。deliver_sm與unicode charecter請求

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, ""); 
} 

回答

0

嘗試改爲使用UTF-8編碼。可能你需要首先實際編碼你的數據。

聲明:我不知道deliver_sm API,但SMS確實使用UTF-8。 < - 我糾正,USC-16 is used消息不適合7位和8位編碼。

+0

我想它。我想印地文文本轉換在此馬納爾也::嘗試{ \t \t \t \t串串= 「हिंदिभाषा」; \t \t byte [] utf8 = string.getBytes(「UTF-8」); \t \t \t \t string = new String(utf8,「UTF-8」); \t \t System.out.println(string); \t \t}趕上(UnsupportedEncodingException E){ \t \t}但是當過我試圖編譯該代碼是示出這樣的:某些字符可以,T使用CP1252字符編碼.... – koushik

+1

不,SMS使用被映射UTF-16(數據編碼= 8) – puzz

1

您需要設置

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