2013-03-11 69 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参数(可选)。

这两个选项都不能保证在网络之间可移植。因此,如果您要连接到您所在领域内所有网络的聚合器,并且聚合器透明地转发这些字段,则在将消息发送到所有目标网络上的手机时,可能会遇到不一致情况。