java - Unicode 短信发送 (smpp)
问题描述
为了发送 unicode 短信,我将其拆分为 67 个字节,如下所示:
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("UTF-16LE");
List<SmsMessage> gRoutingSubMessageList = new ArrayList<SmsMessage>();
int splitMessageId = (int) (System.currentTimeMillis() % 256);
int st = 0, st2 = 0, j = 0, k = 0;
byte[] dataByte = messageC.getData().getBytes(charset);
//split it
while (j < dataByte.length) {
k++;
SmsMessage m;
if (k == 1)
m = message;
else
m = (SmsMessage) messageC.clone();
j = st + 67 > dataByte.length ? dataByte.length : st + 67;
if (dataByte[j - 1] == 27)
st2 = 65;
else
st2 = 66;
m.setData(new String(dataByte, st, st + st2 > dataByte.length ? dataByte.length - st : st2, charset));
m.setCurrentSegment(k);
m.setSplitMessageId(splitMessageId);
gRoutingSubMessageList.add(m);
st = st + st2;
}
但是收到的消息已损坏,有什么解决办法吗?
解决方案
使用 132 代替 67 和 131 代替 65
推荐阅读
- java - 有没有办法将通过会话获取的数据库中的双值转换为字符串?
- r - 修改 y 轴标签的除最后一个元素之外的所有元素
- c# - WPF 将自定义 ContextMenu 添加到另一个视图中引用的视图
- json - 使用jq如何将key添加到现有的JSON数据结构中
- sql - 计算最后滚动四个星期的平均值
- spring - Spring Boot REST - 将 ThreadPoolTaskExecutor 用于单个作业
- c++ - OpenCV 人脸检测 - if 语句
- visual-studio-2019 - 如何将 Visual Studio 2019 XML 文档格式化为 HTML 或 PDF
- json - ESP32 - http请求后响应无效
- php - 使用 payum symfony5 付款