无法获得额外的转义字符在GSM 7位字母表中工作。

时间:2013-08-23 15:57:17

标签: java encoding gsm smpp 7-bit

我发送给SMSC例如这个字符串“[]”根据GSM 7位字母表编码为十六进制“1B3C201B3E”中的字节[],其中“1B”是额外10个字符的字符, 3C是“[”而3E是“]”,但它不能在我的手机上正确打印,打印“<>”因为它打印“1B”作为空格和“<” =“3C”和“>” =“3E”。此外,它不能打印任何奇怪的字符“èéùìòÇØøÅå€ææÉ@¤¡ÄÖÜܧ¿äöñüà”,但与希腊字符一起工作正常。 这是我的错误还是与特定的SMSC有关?字节[]是否正确?

2 个答案:

答案 0 :(得分:0)

您需要根据需要使用的字符类型选择一个data_coding(或编码方案)。 SMPPv4协议规范文档的第136页显示了您可以使用的数据编码。

然后,例如,如果您选择UCS2,您可以创建msg.getBytes(“UCS2”)并将您的数据编码设置为8,这将使手机中显示任何UCS2可表示的字符。

我认为如果你需要使用GSM 7位字母表,你需要将数据编码设置为1,那么你需要一个gsm 7位字母编码器,从字符串到字节,我认为在标准的jdk中不可用< / p>

答案 1 :(得分:0)

您将data_coding设置为默认值(0),这意味着您不在pdu中指定字母表。 SMSC将使用SMSC端的默认配置字母对其进行解码。

在您的情况下,看起来SMSC未配置为默认使用GSM 7位。可能的默认字母表是拉丁语(ISO-8859-1),因为在拉丁语中,0x3C是“&lt;”并且0x3E是“&gt;”,0x1B不可打印,因此它被转换为空格。

因此,您可以尝试在ISO-8859-1中对邮件进行编码。