【问题标题】:Can't get the extra escape characters to work in GSM 7-bit alphabet.无法让额外的转义字符在 GSM 7 位字母表中工作。
【发布时间】:2013-08-23 15:57:17
【问题描述】:

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

【问题讨论】:

  • 在 SubmitSm pdu 的消息部分中发送的不仅仅是字节,还有你在那里使用的数据编码
  • Alphabet 和 dataCoding 保留为默认值 (0),更改编码没有任何区别。转义字符被完全忽略。
  • 数据编码和消息字节齐头并进,从字符串到字节的转换应该与所使用的数据编码相应地完成。如果您使用数据编码 0,那么您需要知道您的 SMSC 默认使用哪种编码,并将字符串转换为具有该编码的字节

标签: java encoding gsm smpp 7-bit


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    因此您可以尝试使用 ISO-8859-1 对您的消息进行编码。

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2015-10-17
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多