1

例如,我正在向 SMSC 发送此字符串“[]”,该字符串根据 GSM 7 位字母表编码为十六进制“1B3C201B3E”中的字节[],其中“1B”是额外 10 个字符的字符,3C 是“ [" 和 3E 相应地是 "]" 但它不会在我的手机上正确打印 print 打印 "< >" 因为它将 "1B" 打印为空格并且 "<" = "3C" 和 ">" = "3E ”。此外,它无法打印任何奇怪的字符“èéùìòÇØøÅå€ÆæßÉ@¤¡ÄÖÑܧ¿äöñüà”,但适用于希腊字符。是我的错误还是与特定的 SMSC 有关?byte[] 是否正确?

4

2 回答 2

0

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

然后,例如,如果您选择 UCS2,您可以制作 msg.getBytes("UCS2") 并将您的数据编码设置为 8,这将使任何 UCS2 可表示字符在手机中很好地显示。

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

于 2013-08-26T13:45:33.330 回答
0

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

在您的情况下,SMSC 似乎未配置为默认使用 GSM 7 位。可能的默认字母表是拉丁语 (ISO-8859-1),因为在拉丁语中,0x3C 是“<”而 0x3E 是“>”,0x1B 是不可打印的,因此它被转换为空格。

因此,您可以尝试将您的消息编码为 ISO-8859-1。

于 2013-10-22T04:19:28.610 回答