问题描述: 传入一个 srvContent ,通过 smsPDUEncoded 方法进行编码, 得到一个list conlist. 那么如果知道 conlist 如何进行解码 得到 srvContent ,尝试了很多方法都达不到预期的效果
例如: 传入: srvContent = "为中华之崛起而读书,Study for the rise of China"
得到: conlist.get(0) = "true-4a4e3a4e2d534e4e4b5d1b8d77800c8bfb4e66002c0053007400750064007900200066006f00720020007400680065002000720069007300650020006f00660020004300680069006e0061"
public List<String> smsPDUEncoded(String srvContent) {
int length = srvContent.length();
int k = 0;// 短信截取位
boolean bo = false;//用于判读短信中是否含有中文
List<String> conlist = new ArrayList<String>();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
String s1 = srvContent.substring(i, i + 1);
// 是字符,前面两位是00 中文需要四位16进制来表示
if (s1.getBytes().length == 1) {
sb.append("00");
} else {
bo = true;
}
sb.append(Integer.toHexString(srvContent.charAt(i)));
if (sb.length() == 280 && bo) {//中文短信字符长度到280分条发送
String s = sb.toString();
sb = new StringBuffer();
sb.append("true-");
// 最后接上内容编码长度的1/2 用16进制的2位来表示
if (Integer.toHexString(
srvContent.substring(k, i + 1).length() * 2).length() < 2) {
sb.append("0");
}
sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
.length() * 2));
sb.append(s);
conlist.add(sb.toString());//增加到短信LIST中
sb = new StringBuffer();
bo = false;//
k = i + 1;
} else if ((i - k) == 159) {//英文短信
String s = sb.toString();
sb = new StringBuffer();
//conlist.add("false-"/* + srvContent.substring(k, i + 1)*/);
sb.append("false-");
if (Integer.toHexString(
srvContent.substring(k, i + 1).length() * 2).length() < 2) {
sb.append("0");
}
sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
.length() * 2));
sb.append(s);
conlist.add(sb.toString());//增加到短信LIST中
sb = new StringBuffer();
bo = false;
k = i + 1;
} else if (i == length - 1 && !bo) {//英文短信最后一条
//conlist.add("false-" /*+ srvContent.substring(k, i + 1)*/);
String s = sb.toString();
sb = new StringBuffer();
sb.append("false-");
// 最后接上内容编码长度的1/2 用16进制的2位来表示
if (Integer.toHexString(
srvContent.substring(k, i + 1).length() * 2).length() < 2) {
sb.append("0");
}
sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
.length() * 2));
sb.append(s);
conlist.add(sb.toString());
} else if (i == length - 1 && bo) {//中文短信最后一条
String s = sb.toString();
sb = new StringBuffer();
sb.append("true-");
// 最后接上内容编码长度的1/2 用16进制的2位来表示
if (Integer.toHexString(
srvContent.substring(k, i + 1).length() * 2).length() < 2) {
sb.append("0");
}
sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
.length() * 2));
sb.append(s);
conlist.add(sb.toString());
}
}
return conlist;
}