我想通过SMPP(JSMPP库)向sms发送unicode字符。我知道数据编码必须为8并且它和短信长度为70个字符。但是当我尝试这个时,我会得到带有中文符号的短信。这是我的代码:
ESMClass esmClass = new ESMClass();
GeneralDataCoding coding = new GeneralDataCoding(8)
String text = "üöğçşə ƏIÖĞŞÇÜ";
String p = HexUtil.convertStringToHexString(text);
byte[] textByte = HexUtil.convertHexStringToBytes(p);
String messageId = session.submitShortMessage("CMT",TypeOfNumber.INTERNATIONAL,
NumberingPlanIndicator.UNKNOWN,"1111", TypeOfNumber.INTERNATIONAL,
NumberingPlanIndicator.UNKNOWN, "phone_number", esmClass,
(byte) 0, (byte) 1, timeFormatter.format(new Date()), null,
new RegisteredDelivery(SMSCDeliveryReceipt.DEFAULT),
(byte) 0, coding, (byte) 0, textByte);
在此之后,我收到带有中文符号的消息。有什么问题?
答案 0 :(得分:3)
应该是
byte[] textByte = text.getBytes("UTF-16BE");
HexUtil
在这里是一个红鲱鱼。
答案 1 :(得分:2)
不要将字符串转换为十六进制字符串&使用此数据编码而不是:
GeneralDataCoding dataCoding = new GeneralDataCoding(false, true, MessageClass.CLASS1, Alphabet.ALPHA_UCS2);
获取字节:
byte[] textByte = text.getBytes("UTF-16BE");
此示例使您可以使用此charset UCS2发送短信。