使用AWS SNS发送含特殊字符SMS时字符偶被替换为点的问题咨询
AWS SNS 短信特殊字符异常问题解答
- 这种情况不正常,属于字符编码或SNS短信通道的兼容性问题。
- 问题根源:SNS短信默认使用GSM-7单字节编码,仅支持128个基础字符,
Œ这类特殊字符不在其字符集内。当SNS尝试用GSM-7发送非兼容字符时,会自动将其替换为.;但如果短信内容包含足够多的非GSM-7字符,SNS会自动切换到UCS-2双字节编码,此时特殊字符就能正常显示,这就是结果不稳定的原因。 - 解决配置方案:
- 强制指定UCS-2编码:调用SNS的
publish接口时,通过MessageAttributes明确设置编码类型。示例代码:const AWS = require('aws-sdk'); const sns = new AWS.SNS(); const publishParams = { Message: '<Œufs>', PhoneNumber: '+目标手机号', MessageAttributes: { 'AWS.SNS.MobileSMS': { DataType: 'String', StringValue: '{"SMSType":"Transactional", "Encoding":"UCS-2"}' } } }; sns.publish(publishParams, (err, result) => { err ? console.error(err) : console.log(result); }); - 提前字符校验(可选):如果想保留GSM-7的传输效率,可以提前校验短信内容,将非GSM-7字符替换为兼容替代字符,或提前判断是否需要切换编码。
- 强制指定UCS-2编码:调用SNS的
内容的提问来源于stack exchange,提问作者FHM
相关产品推荐
相关产品推荐

