关于CDMA MODEM短信编码问题 (超级终端 smslib) 我不懂纯粹给你顶上来你应该去j2me问更好 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用utf8编码,显示的时候在解码。再不行就进行两次utf8编码,一次解码 编码问题 还是用 utf-8 国际标准好点 public void run() { // 初始化短信 OutboundMessage outMsg = new OutboundMessage(phone, message); outMsg.setEncoding(MessageEncodings.ENCUCS2);//编码 try { service.sendMessage(outMsg); logger.info("发送短信:\n" + outMsg); } catch (Exception e) { logger.error("短信发送失败,", e); } } import org.loon.framework.test.sms.SMS; import org.loon.framework.test.sms.SMSImpl; public class SendManager { public static void main(String[] args) throws Exception { SMS sms = new SMSImpl(); sms.begin(); // 与默认手机端口建立通讯 sms.getDriver().sendMessage("13912345678","短信内容"); sms.end();// 关闭通讯 } import org.loon.framework.test.sms.SMS;import org.loon.framework.test.sms.SMSImpl;public class SendManager { public static void main(String[] args) throws Exception { SMS sms = new SMSImpl(); sms.begin(); // 与默认手机端口建立通讯 sms.getDriver().sendMessage("13912345678","短信内容"); sms.end();// 关闭通讯 }我们可以通过简单的封装让操作变得更加简便一点:view plainrun in browsercopy to clipboardprint?package com.xiaosilent.demo; import java.util.*; import org.apache.log4j.Logger; import org.smslib.*; import com.xiaosilent.util.Parameters; /** * 短信发送工具 * * @author Administrator * */ public class SMSSender { private Service service; private String port, manufacturer, model; private int baudrate; private Logger logger = Logger.getLogger(SMSSender.class.getName()); private Timer timer; private static SMSSender instance; private static boolean available; private SMSSender() { port = Parameters.getSmsModemPort(); //获取参数配置,端口(COM1) manufacturer = Parameters.getSmsModemManufacturer(); // model = Parameters.getSmsModemModel(); // try { baudrate = Integer.parseInt(Parameters.getSmsModemBaudRate());// 比特率(9600) } catch (Exception e) { baudrate = 9600; } timer = new Timer(); available = open(); } public static SMSSender getInstance() { if (instance == null) { instance = new SMSSender(); } return instance; } /** * 判断短信猫是否可用 * * @return */ public boolean isAvailable() { return available; } /** * 初始化,启动短信猫 * * @return */ private boolean open() { service = new Service(); SerialModemGateway gateway = new SerialModemGateway("SMS", port, baudrate, manufacturer, model); gateway.setInbound(false); gateway.setOutbound(true); service.addGateway(gateway); service.setOutboundNotification(new IOutboundMessageNotification() { public void process(String gatewayId, OutboundMessage msg) { logger.info("Outbound handler called from Gateway:" + gatewayId); logger.info(msg); } }); try { service.startService(); } catch (Exception e) { logger.error("短信猫启动失败!" + e.getMessage()); close(); return false; } return true; } /** * 发送短信 * * @param phone * @param message * @return */ public void send(String phone, String message) { logger.info("请求发送短信,手机:" + phone + ",内容:" + message); if (!available) { // 状态检测,如果不可用,直接跳过 logger.info("短信猫状态异常,跳过短信处理!"); return; } timer.schedule(new SendTask(phone, message), 0); } /** * 关闭短信猫 */ public void close() { try { timer.cancel(); service.stopService(); logger.info("短信猫已关闭!"); } catch (Exception e) { logger.error("关闭短信猫失败!", e); } } private class SendTask extends TimerTask { private String phone, message; public SendTask(String phone, String message) { this.phone = phone; this.message = message; } public void run() { // 初始化短信 OutboundMessage outMsg = new OutboundMessage(phone, message); outMsg.setEncoding(MessageEncodings.ENCUCS2); try { service.sendMessage(outMsg); logger.info("发送短信:\n" + outMsg); } catch (Exception e) { logger.error("短信发送失败,", e); } } } } 《中国电信报文接口格式定义》的短消息格式短消息内容体的编码格式。0=ASCII编码;3=短消息写卡操作;4=二进制短消息;8=UCS2编码;15=GB18030编码;246(F6)=(U)SIM相关消息;其它保留。对于文字短消息,要求MsgFormat=15。对于回执消息,要求MsgFormat=0。如果是UCS2编码:msgContent = new String(this.getMsgField(), "iso-10646-ucs-2"); 感谢大家的回复,不过问题还是没最终解决根据显示内容at+cmgl="all" +CMGL:0,"REC READ","15710000000",0,4,4 短信编码应该为4但是不知道最终怎么解码发送短信时,手机接收中文短信是正常的,但就是接收短信怎么着也解析不出来。期待最终解决方案. 求助输入输出流的问题 谁知道鼠标的响应? 手机应用软件开发还需要学jsp吗 java某一类型都可以强转换为OBJECT吗? 关于模式对话框 java.util.Properties.load(InputStream inStream)对于文件输入流——这个文件内容格式有何要求 java 乱码求助 请高手帮我解答一下关于同步线程里的wait()和notify()是如何实现过程的?? eclipse 编译的问题 关于配置rmi server?高手帮忙!!! 菜鸟问题,帮忙看下 main中的参数可以随便写吗?
// 初始化短信
OutboundMessage outMsg = new OutboundMessage(phone, message);
outMsg.setEncoding(MessageEncodings.ENCUCS2);//编码
try {
service.sendMessage(outMsg);
logger.info("发送短信:\n" + outMsg);
} catch (Exception e) {
logger.error("短信发送失败,", e);
}
}
import org.loon.framework.test.sms.SMS;
import org.loon.framework.test.sms.SMSImpl;
public class SendManager {
public static void main(String[] args) throws Exception {
SMS sms = new SMSImpl();
sms.begin(); // 与默认手机端口建立通讯
sms.getDriver().sendMessage("13912345678","短信内容");
sms.end();// 关闭通讯
} import org.loon.framework.test.sms.SMS;
import org.loon.framework.test.sms.SMSImpl;
public class SendManager {
public static void main(String[] args) throws Exception {
SMS sms = new SMSImpl();
sms.begin(); // 与默认手机端口建立通讯
sms.getDriver().sendMessage("13912345678","短信内容");
sms.end();// 关闭通讯
}我们可以通过简单的封装让操作变得更加简便一点:view plainrun in browsercopy to clipboardprint?
package com.xiaosilent.demo;
import java.util.*;
import org.apache.log4j.Logger;
import org.smslib.*;
import com.xiaosilent.util.Parameters;
/**
* 短信发送工具
*
* @author Administrator
*
*/
public class SMSSender {
private Service service;
private String port, manufacturer, model;
private int baudrate;
private Logger logger = Logger.getLogger(SMSSender.class.getName());
private Timer timer;
private static SMSSender instance;
private static boolean available;
private SMSSender() {
port = Parameters.getSmsModemPort(); //获取参数配置,端口(COM1)
manufacturer = Parameters.getSmsModemManufacturer(); //
model = Parameters.getSmsModemModel(); //
try {
baudrate = Integer.parseInt(Parameters.getSmsModemBaudRate());// 比特率(9600)
} catch (Exception e) {
baudrate = 9600;
}
timer = new Timer();
available = open();
}
public static SMSSender getInstance() {
if (instance == null) {
instance = new SMSSender();
}
return instance;
}
/**
* 判断短信猫是否可用
*
* @return
*/
public boolean isAvailable() {
return available;
}
/**
* 初始化,启动短信猫
*
* @return
*/
private boolean open() {
service = new Service();
SerialModemGateway gateway = new SerialModemGateway("SMS", port, baudrate, manufacturer, model);
gateway.setInbound(false);
gateway.setOutbound(true);
service.addGateway(gateway);
service.setOutboundNotification(new IOutboundMessageNotification() {
public void process(String gatewayId, OutboundMessage msg) {
logger.info("Outbound handler called from Gateway:" + gatewayId);
logger.info(msg);
}
});
try {
service.startService();
} catch (Exception e) {
logger.error("短信猫启动失败!" + e.getMessage());
close();
return false;
}
return true;
}
/**
* 发送短信
*
* @param phone
* @param message
* @return
*/
public void send(String phone, String message) {
logger.info("请求发送短信,手机:" + phone + ",内容:" + message);
if (!available) { // 状态检测,如果不可用,直接跳过
logger.info("短信猫状态异常,跳过短信处理!");
return;
}
timer.schedule(new SendTask(phone, message), 0);
}
/**
* 关闭短信猫
*/
public void close() {
try {
timer.cancel();
service.stopService();
logger.info("短信猫已关闭!");
} catch (Exception e) {
logger.error("关闭短信猫失败!", e);
}
}
private class SendTask extends TimerTask {
private String phone, message;
public SendTask(String phone, String message) {
this.phone = phone;
this.message = message;
}
public void run() {
// 初始化短信
OutboundMessage outMsg = new OutboundMessage(phone, message);
outMsg.setEncoding(MessageEncodings.ENCUCS2);
try {
service.sendMessage(outMsg);
logger.info("发送短信:\n" + outMsg);
} catch (Exception e) {
logger.error("短信发送失败,", e);
}
}
}
}
短消息内容体的编码格式。
0=ASCII编码;
3=短消息写卡操作;
4=二进制短消息;
8=UCS2编码;
15=GB18030编码;
246(F6)=(U)SIM相关消息;
其它保留。
对于文字短消息,要求MsgFormat=15。对于回执消息,要求MsgFormat=0。如果是UCS2编码:
msgContent = new String(this.getMsgField(), "iso-10646-ucs-2");
根据显示内容
at+cmgl="all"
+CMGL:0,"REC READ","15710000000",0,4,4 短信编码应该为4
但是不知道最终怎么解码发送短信时,手机接收中文短信是正常的,但就是接收短信怎么着也解析不出来。期待最终解决方案.