【发布时间】:2021-02-02 09:27:56
【问题描述】:
我通过 GSM 设备发送短信,试试这个:https://stackoverflow.com/a/31361225/6250402
它可以发送普通短信,我尝试发送 Unicode 文本但它自动转换为 ASCII:VD¥n ba:#n D_a:?n: TBM01
库:
<dependency>
<groupId>com.neuronrobotics</groupId>
<artifactId>nrjavaserial</artifactId>
<version>5.1.1</version>
</dependency>
我的代码:
CommPortIdentifier portId = "I get CommPort match name";
SerialPort serialPort = portId.open("name", 2000);
serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
this.outputStream = serialPort.getOutputStream();
// each command function
private void send(String cmd) throws IOException {
outputStream.write(cmd.getBytes(StandardCharsets.UTF_8)); //
outputStream.flush();
}
// this sends message method
send("AT+CMGS=" + '"' + phone + '"' + "\r\n");
send(message + '\032');
我的配置有错吗?
任何通过 GSM for java 发送 SMS 的代码都是一个很好的答案。
结果我错过了AT+CSMP=1,167,0,8(https://stackoverflow.com/a/15312611/6250402,更多信息,请看https://www.smssolutions.net/tutorials/gsm/sendsmsat/)
【问题讨论】:
-
您是否尝试过 UCS-2(实际上是 UTF-16)?
-
您的意思是
encodeAsUcs2代表phone和mesage或所有cmd? -
据我所知,SMS 仅支持 GSM-7(8 位编码)和 UTF-16(16 位编码;以前是 UCS-2),而 UTF-8 是可变字符不能在那里使用的长度编码。我会先从消息正文开始,但我没有在那么低的级别使用 SMS,所以我只能猜测。
-
嗯,我可能是错的,但整个
cmd可能应该被转换(我的意思是,否则混合编码有什么意义?)。