我正在与一家公司合作,该公司正尝试使用各种语言向世界各国的人们发送短信。
该公司有一个定制编写的应用程序,它使用SMPP协议与各种电信公司的SMSC进行通信。
我们已经告知不同的电信公司使用data_encoding将SMPP PDU提交给SMSC。
目前我们使用的是7位GSM),Latin-1和UCS-2编码。我们正在使用每个Telco告诉我们使用的编码。对SMPP PDU的有效载荷进行编码,并相应地设置data_coding参数(GSM为0x00,Latin-1为0x03,UCS-2为0x08)。
问题1 :我们使用什么编码来提交SMPP PDU到SMSC真的很重要吗? SMSC是否应该能够根据data_coding参数的内容从提交的SMPP编码转换为适当的编码?我们不应该能够通过SMPP作为UCS-2提交所有消息,将data_coding参数设置为0x08,并让Telco负责为我们转换到SMS PDU吗?
目前,我们发送想要发送葡萄牙语的短信。电信公司告诉我们使用SMPP的“SMSC默认字母”来提交消息。进一步说,他们说这与GSM默认字母表相同这是有关的,因为葡萄牙语字母没有完全由GSM默认字母表示。电信公司似乎只是简单地将葡萄牙语字母音译为英语字母。电信公司通知我们,“如果您发送的SMS具有SMSC无法识别的特殊字符(例如,á,ó,ã),SMSC会将这些字符编码为最接近的字符。”我发现这有点不可能,因为GSM Default Alphabet首先不支持这样的字符。
问题2 :如何提交特殊字符,如果使用GSM默认字母,则无法识别?是否所有作为GSM默认字母提交的字符都不符合GSM 03.38标准中定义的7位,128字母字母?
问题3 :由于电信公司要求我们使用“GSM默认字母”,我们应该提交编码为7位打包八位字节的SMPP有效负载,对吗?
我们的应用程序将文本存储为UTF-8。由于葡萄牙电信公司要求我们提交带有GSM默认字母的有效载荷的SMPP,我认为我们需要将UTF-8转换为7位GSM默认字母表。我当前的策略涉及映射每个具有GSM默认等效值(总共128个字符)的UTF-8字符,然后将其他UTF-8字符音译为最接近的GSM默认字母表等效字符,否则为问号。
问题4 :这是处理从UTF-8到GSM默认字母表的转换的合适方式吗?似乎没有很多其他方法。有问题的应用程序在Unix环境中使用Ruby。没有现有的支持GSM的库似乎可用,因此自定义库似乎是唯一的方法。
我的研究发现了GSM锁定移位表的细节,以支持仅使用7位的其他语言。锁定移位表在SMS PDU的UDH部分中指定。
问题5 :如何通过SMPP使用锁定班次表发送短信?是否需要修改SMPP PDU有效负载以包含指定锁定移位表的UDH? data_coding参数应该设置为什么?
如果有人能够权威地回答这些问题,我会很激动。