Java 通过SMPP发送阿拉伯文flash消息

Java 通过SMPP发送阿拉伯文flash消息,java,smpp,Java,Smpp,在Java中使用SMPP协议时,我在用阿拉伯语发送flash消息时遇到了一个问题。我成功地以标准英语格式发送邮件,但当我使用阿拉伯语Unicode时,邮件以未知格式发送 下面是我正在使用的相关示例请求 byte protocolId = 0x00; byte dataCoding = (byte) 0xf0; //(for flash message) byte smsClass = 0x00; request.setShortMessage("\u0628", Data.ENC_UTF8);

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

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

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

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

您需要将dcs设置为0x18

有两种编码方式允许访问负责flash消息的message class参数

进一步阅读请参见第4节

您的值0xf0表示对dcs进行编码的第二种方式,并将message class设置为0,这是flash,但字母表也设置为默认值。顺便说一句,这种方式不会影响UCS2


另一种方法允许更好的控制。上十六进制半字节设置为1,这意味着下十六进制半字节包含有关消息类的信息。然后,较低的十六进制半字节表示使用了UC2,消息类设置为0。

我还没有找到一种可以在所有SMS C上工作的简单方法

有两种可能性;您必须进行实验,看看哪种方法(如果有)适用于您的提供者

选项1。将数据编码参数设置为0x18

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

选项2。将数据编码设置为0x08,并将dest\u addr\u子单元设置为1(“MS显示”)

这是一种更符合标准的方式,但依赖于SMPP堆栈和支持dest_addr_子单元参数(可选)的SMS-C堆栈


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

我将测试是否可以发送阿拉伯文文本。根据SMPP规范3.4第5.2.19节,应使用DCS 0x08设置unicode。然后,我会尝试使用DCS 0x88发送flash消息。是的,您对规范的理解是正确的。但是,当我使用0x08进行数据编码时,消息可以传递阿拉伯语,尽管它不能作为flash消息传递。它像普通邮件一样直接存储在收件箱中。