3

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

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

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

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

4

2 回答 2

3

您需要将 dcs 设置为 0x18。

有两种编码方式允许访问负责闪存消息的消息类参数。

有关进一步阅读,请参阅http://www.etsi.org/deliver/etsi_ts/100900_100999/100900/07.02.00_60/ts_100900v070200p.pdf第 4 节。

您的值 0xf0 表示编码 dcs 的第二种方式,并将消息类设置为 0,即 flash,但字母表也设置为默认值。顺便说一下,这种方式不是UCS2。

另一种方式允许更好的控制。高位十六进制半字节设置为 1,这仅表示低位十六进制半字节包含有关消息类别的信息。然后,较低的十六进制半字节表示使用了 UC2 并且消息类别设置为 0。

于 2013-03-17T11:45:20.490 回答
1

我还没有遇到适用于所有 SMS-C 的万无一失的方法。

有两种可能性;您将不得不尝试查看哪种(如果有的话)方法适用于您的提供商。

选项 1.将 data_coding 参数设置为 0x18。

这在@Martin 的回答中得到了很好的解释,但严格来说,这是一个 GSM/MAP DCS 值(搜索规范“TS 23.038”),而不是 SMPP data_coding 值。此选项预先假定 SMS-C 透明地传递此 SMPP data_coding 值。不能保证这一点 - data_coding 范围 0x0F-0xBF 保留在 SMPP 中,因此如果不尝试,您不知道 SMS-C 会用它做什么。

选项 2.将 data_coding 设置为 0x08 和 dest_addr_subunit = 1 ("MS Display")

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

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

于 2015-09-17T12:03:36.887 回答