通过SMPP以阿拉伯语发送flash消息

时间:2013-03-11 15:24:12

标签: java smpp

我在使用Java中的SMPP协议时遇到使用阿拉伯语发送flash消息的问题。我成功发送标准英文格式,但当我使用阿拉伯语unicodes时,邮件以未知格式发送。

以下是我正在使用的相关示例请求。

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

日志中的SMPP请求在发送请求时显示正确的阿拉伯字母,但在用户端,字母表格式不可读。请求的其余设置被设置为默认值。将不胜感激任何实现目标的建议。提前谢谢。

2 个答案:

答案 0 :(得分: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 :(得分: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。将data_coding设置为0x08并将dest_addr_subunit设置为1(" MS Display")

这是更符合标准的方式,但依赖于您的SMPP堆栈和支持dest_addr_subunit参数的SMS-C堆栈(可选)。

这两种选项都不能保证在网络之间可移植。因此,如果您要跨越您所在地区的所有网络连接到聚合器,并且聚合器透明地转发字段,则在向所有目标网络上的电话发送消息时可能会遇到不一致。