2013-03-11 50 views
3

我在使用Java中的SMPP協議時以阿拉伯語發送Flash消息時遇到問題。我以標準英文格式發送成功,但當我使用阿拉伯文unicodes時,郵件以未知格式發送。通過SMPP以阿拉伯語發送Flash消息

下面是我正在使用的相關示例請求。

byte protocolId = 0x00; 
byte dataCoding = (byte) 0xf0; //(for flash message) 
byte smsClass = 0x00; 
request.setShortMessage("\u0628", Data.ENC_UTF8); 

在日誌中的SMPP請求顯示正確的阿拉伯字母在發送請求,但在用戶端的字母是不可讀的格式。剩餘的請求設置被設置爲默認值。希望能夠達成目標的任何建議。提前致謝。

+0

我會測試看是否可以發送阿拉伯文字。根據SMPP規範3.4第5.2.19節,應使用DCS 0x08來設置unicode。然後,我會嘗試使用DCS 0x88發送閃光消息。 – 2013-03-11 21:19:39

+0

是的,你說的是對的。但是當我使用0x08進行數據編碼時,消息可以傳遞阿拉伯數字,但它不能作爲閃光消息傳遞。它就像正常消息一樣直接存儲在收件箱中。 – ktk 2013-03-12 05:09:41

回答

3

您需要將dcs設置爲0x18。

有兩種編碼方式允許訪問負責flash消息的消息類參數。

請參閱http://www.etsi.org/deliver/etsi_ts/100900_100999/100900/07.02.00_60/ts_100900v070200p.pdf第4節以供進一步閱讀。

您的值0xf0表示將dcs編碼並將消息類設置爲0的第二種方式,該方式爲閃爍式,但字母表也設置爲默認值。順便說一下,這種方式並不是UCS2。

另一種方式允許更好的控制。上面的十六進制半字節設置爲1,這意味着較低的十六位半字節包含有關消息類別的信息。然後較低的六位半字節告訴我使用了UC2並且消息類別設置爲0.

1

我還沒有遇到一種可以跨所有SMS-C工作的萬無一失的方法。

有兩種可能性;您將不得不嘗試查看哪些(如果有)方法適用於您的提供者。

選項1.將data_coding參數設置爲0x18。

這在@ Martin的答案中有很好的解釋,但嚴格來說這是一個GSM/MAP DCS值(搜索規範「TS 23.038」),而不是SMPP data_coding值。此選項預先假定SMS-C透明地傳遞此SMPP data_coding值。無法保證--SMPP中保留了data_coding範圍0x0F-0xBF,因此您不知道SMS-C將如何處理它,而不用嘗試它。

選項2集編碼格式到0x08的和dest_addr_subunit = 1(「MS顯示」)

這是更符合標準的方式,但依賴兩者的SMPP堆棧和SMS-C的堆棧支持上dest_addr_subunit參數(可選)。

這兩個選項都不能保證在網絡之間可移植。因此,如果您要連接到您所在領域內所有網絡的聚合器,並且聚合器透明地轉發這些字段,則在將消息發送到所有目標網絡上的手機時,可能會遇到不一致情況。