Kannel 1.5.0发送超160字符GSM 7位短信乱码求助
Kannel 1.5.0 GSM 7位长短信乱码问题解决方法
1. 修正编码与字符集的冲突配置
你当前设置了coding=0(对应GSM 7位编码),但同时指定utf-8字符集,这会导致编码转换异常:
- 发送请求时移除
charset=utf-8参数,仅保留coding=0,让Kannel基于GSM 7位字符集处理文本。 - 确保提交的短信内容仅包含GSM 7位标准字符范围内的内容(英文字母、数字、常见符号等),避免混入非GSM字符(如中文、特殊符号)。
2. 检查并调整SMSC配置
针对你使用的SMSC2配置块,补充以下设置:
group = smsc smsc = smpp smsc-id = SMSC2 ... # 其他已有配置 smsc-encoding = 0 # 强制使用GSM 7位编码 concatenation = true # 确保SMSC级开启长短信拼接支持
确认SMSC配置中没有覆盖编码的冲突参数,保证与发送端的coding=0一致。
3. 启用调试日志排查细节
在Kannel核心配置中开启调试日志,跟踪长短信拆分与编码过程:
group = core ... # 其他已有配置 log-level = 4 # 开启详细调试日志
发送长短信后检查日志,重点关注:
- 每条拆分短信的
coding值是否为0 - UDHI(用户数据头)是否正确生成(长短信拼接必需)
- 是否有编码转换失败的错误提示
4. 分场景验证测试
- 纯GSM字符测试:发送仅含GSM标准字符的长文本(如170个英文字母),验证拼接后是否正常显示。如果正常,说明之前的问题是因为内容包含非GSM字符。
- 非GSM字符处理:如果短信必须包含非GSM字符,需将
coding改为2(UCS-2编码),此时每条长短信的字符上限为70,Kannel会自动拆分,同时确保SMSC支持UCS-2编码。
内容的提问来源于stack exchange,提问作者gwanchi
相关产品推荐
相关产品推荐

