310.2. 数据编码、字母和国际字符集
数据编码和字母顺序可根据每个消息指定。可以为端点指定默认值。务必要了解这些选项之间的关系,以及设置多个值时组件的作用方式。
数据编码是 SMPP wire 格式的 8 位字段。
alphabet 对应于数据编码字段的位 0-3。对于某些类型的消息,当使用消息类(通过设置数据编码字段的位 5)时,数据编码字段的低两位不会被解释为 alphabet,仅位 2 和 3 影响 alphabet。
此外,当前 JSMPP 库的版本仅用于支持位 2 和 3,假设位 0 和 1 用于消息类。这就是为什么 JSMPP 中的 Alphabet 类不支持值 3 (二进制 0011,表示 ISO-8859-1)。
虽然 JSMPP 提供消息类参数的表示,但 Camel 组件目前不提供在 data coding 字段中手动设置对应位的方法。
在传出消息中设置 data coding 字段时,Camel 组件会考虑以下值,并使用它找到的第一个值:
- 在标头中指定的数据编码
- 在标头中指定的 alphabet
- 端点配置中指定的数据编码(URI 参数)
较旧版本的 Camel 在支持国际字符集时存在错误。这个功能只在为所有消息使用单个编码时才可以正常工作,当用户想要根据消息更改它时,很难这样做。需要此功能才能工作的用户应确保其 Camel 版本包含针对的修复
JIRA issues Macro: com.atlassian.sal.api.net.ResponseStatusException: Unexpected response received.状态代码: 404
.
除了试图向 SMSC 发送数据编码值外,Camel 组件还会尝试分析消息正文,将其转换为 Java String (Unicode),并将其转换为对应 alphabet when 中的一个字节数组中的字节数组,决定在字节数组中使用哪个 alphabet 时,Camel SMPP 组件不会考虑数据编码值(header 或 配置),它只考虑指定的 alphabet 参数(来自该标头或端点)。
如果 String 中的一些字符无法在所选字母中表示,则它们可能会替换为问号(?)符号。API 用户可能要考虑检查其消息正文是否可以转换为 ISO-8859-1,然后再将其传递给组件,如果没有,则将 alphabet 标头设置为请求 UCS-2 编码。如果没有指定 alphabet 和数据编码选项,则组件可能会尝试检测所需的编码并为您设置数据编码。
alphabet 代码列表在 SMPP 规格 v3.4、section 5.2.19 中指定。SMPP 规范的一个显著限制是没有明确请求使用 GSM 3.38 (7 位)字符集的字母代码。为 alphabet 选择值 0,选择 SMSC 默认 alphabet,这通常意味着 GSM 3.38,但它无法保证。SMPP 网关 Nexmo 实际上允许使用控制面板选项 映射到任何其他字符集。建议用户检查其 SMSC 操作器,以确认将哪一个字符集用作默认值。