使用java发送unicode短信
我通过GSM设备发送短信,请尝试以下操作: 它可以发送普通短信,我尝试发送Unicode文本,但它会自动转换为ASCII:使用java发送unicode短信,java,sms,gsm,Java,Sms,Gsm,我通过GSM设备发送短信,请尝试以下操作: 它可以发送普通短信,我尝试发送Unicode文本,但它会自动转换为ASCII:VD¥n ba:#n D_a:?n:TBM01 库: 机器人学 ,要了解更多信息,请查看)以下是在发送/接收Unicode文本时需要签入的原因 确保以UTF-8格式读取输入,使用UTF-8编码创建InputstreamReader构造函数 InputStream InputStream=新文件InputStream(“data.txt”) 有关更多参考资料: 使用by
VD¥n ba:#n D_a:?n:TBM01
库:
机器人学
,要了解更多信息,请查看)以下是在发送/接收Unicode文本时需要签入的原因
- 确保以UTF-8格式读取输入,使用UTF-8编码创建InputstreamReader构造函数
InputStream InputStream=新文件InputStream(“data.txt”)
有关更多参考资料:
- 使用bytemessage方法而不是文本消息来发送/接收unicode文本
以下是在发送/接收Unicode文本时需要检查的原因
- 确保以UTF-8格式读取输入,使用UTF-8编码创建InputstreamReader构造函数
InputStream InputStream=新文件InputStream(“data.txt”)
有关更多参考资料:
- 使用bytemessage方法而不是文本消息来发送/接收unicode文本
要发送unicode文本,首先选择UTF-16(UCS2)字符集
AT+CSCS=“UCS2”
设置为+CSCS=“UCS2”后,您发送的每个字符串参数都必须编码为UCS2格式
您可以将blow实用程序引用到UCS2进行编码
要发送unicode文本,首先选择UTF-16(UCS2)字符集
AT+CSCS=“UCS2”
设置为+CSCS=“UCS2”后,您发送的每个字符串参数都必须编码为UCS2格式
您可以将blow实用程序引用到UCS2进行编码
我有一个Java GSM设备通信的示例项目,我在一个连接到SIMCom800L模块的树莓中运行。它使用jSerialComm进行串行通信,无需任何配置即可正常工作。请看一下我的回购协议:
要发送Unicode,您需要配置GSM设备字符集。使用此命令检查可能的集合:
AT+CSCS=?
+CSCS: ("GSM","UCS2","IRA","HEX")
如果答案包含“HEX”或“UCS2”,则似乎支持Unicode。我试过使用UCS2,效果很好。只需使用:AT+CSCS=“UCS2”
更改字符集,这只会影响sms,而不会影响常规命令
现在,您的设备将正确识别从Java发送的unicode字符串。不要忘记设置短信文本模式:AT+CMGF=1
基于我的回购协议,我给大家举了一个完整的例子:
//SIMCom serial port configuration: 115200 bps, 8 bit data, no parity, 1 bit stop, no data stream control
SerialPort serialPort = SerialPort.getCommPort("serial0");
serialPort.setComPortParameters(115200, 8, ONE_STOP_BIT, NO_PARITY);
serialPort.setFlowControl(FLOW_CONTROL_DISABLED);
serialPort.setComPortTimeouts(TIMEOUT_READ_BLOCKING, 3000, 0);
serialPort.openPort();
// Set sms text mode
String textModeCommand = "AT+CMGF=1\r";
serialPort.writeBytes(textModeCommand.getBytes(StandardCharsets.UTF_8), textModeCommand.length());
// Set UCS2 charset
String characterSetCommand = "AT+CSCS=\"UCS2\"\r";
serialPort.writeBytes(characterSetCommand.getBytes(StandardCharsets.UTF_8), characterSetCommand.length());
// Send sms command
String sendTextCommand1 = "AT+CMGS=\"" + number + "\"\n";
String sendTextCommand2 = text + (char) 26 + "\r";
serialPort.writeBytes(sendTextCommand1.getBytes(StandardCharsets.UTF_8), sendTextCommand1.length());
serialPort.writeBytes(sendTextCommand2.getBytes(StandardCharsets.UTF_16), sendTextCommand2.length());
请注意,在send sms命令中,我使用UTF_16字符集对文本部分进行编码,而不是UTF_8,我有一个Java GSM设备通信的示例项目,我在连接到SIMCom800L模块的树莓中运行该项目。它使用jSerialComm进行串行通信,无需任何配置即可正常工作。请看一下我的回购协议:
要发送Unicode,您需要配置GSM设备字符集。使用此命令检查可能的集合:
AT+CSCS=?
+CSCS: ("GSM","UCS2","IRA","HEX")
如果答案包含“HEX”或“UCS2”,则似乎支持Unicode。我试过使用UCS2,效果很好。只需使用:AT+CSCS=“UCS2”
更改字符集,这只会影响sms,而不会影响常规命令
现在,您的设备将正确识别从Java发送的unicode字符串。不要忘记设置短信文本模式:AT+CMGF=1
基于我的回购协议,我给大家举了一个完整的例子:
//SIMCom serial port configuration: 115200 bps, 8 bit data, no parity, 1 bit stop, no data stream control
SerialPort serialPort = SerialPort.getCommPort("serial0");
serialPort.setComPortParameters(115200, 8, ONE_STOP_BIT, NO_PARITY);
serialPort.setFlowControl(FLOW_CONTROL_DISABLED);
serialPort.setComPortTimeouts(TIMEOUT_READ_BLOCKING, 3000, 0);
serialPort.openPort();
// Set sms text mode
String textModeCommand = "AT+CMGF=1\r";
serialPort.writeBytes(textModeCommand.getBytes(StandardCharsets.UTF_8), textModeCommand.length());
// Set UCS2 charset
String characterSetCommand = "AT+CSCS=\"UCS2\"\r";
serialPort.writeBytes(characterSetCommand.getBytes(StandardCharsets.UTF_8), characterSetCommand.length());
// Send sms command
String sendTextCommand1 = "AT+CMGS=\"" + number + "\"\n";
String sendTextCommand2 = text + (char) 26 + "\r";
serialPort.writeBytes(sendTextCommand1.getBytes(StandardCharsets.UTF_8), sendTextCommand1.length());
serialPort.writeBytes(sendTextCommand2.getBytes(StandardCharsets.UTF_16), sendTextCommand2.length());
注意,在发送sms命令中,我使用UTF_16字符集对文本部分进行编码,而不是UTF_8您是否尝试了UCS-2(有效的UTF-16)?您的意思是encodeAsUcs2
用于phone
和mesage
或所有cmd
?据我所知,sms支持GSM-7(8位编码)和UTF-16(16位编码;以前是UCS-2),而UTF-8是一种可变字符长度编码,不能在那里使用。我会先从消息正文开始,但我没有在那么低的级别上使用SMS,所以我只能猜测。嗯,我可能错了,但整个cmd
可能应该转换(我的意思是,混合编码还有什么意义?)你试过用UCS-2(有效的UTF-16)代替吗?你是说encodeAsUcs2
用于phone
和mesage
或所有cmd
?据我所知,SMS支持GSM-7(8位编码)和UTF-16(16位编码;以前是UCS-2)只是,UTF-8是一种可变字符长度编码,在那里不能使用。我会先从消息正文开始,但我没有在那么低的级别上使用SMS,所以我只能猜测。嗯,我可能错了,但是整个cmd
可能应该转换(我的意思是,否则混合编码有什么意义?)。调用AT+CSCS=?
我得到了+CSCS:(“GSM”、“PCCP437”、“CUSTOM”、“HEX”)
,无法设置AT+CSCS=“UCS2”
然后选择HEX。您需要将文本字符串编码为十六进制。检查:我想我的配置或其他东西有误,我发送了06450631062D06280627
就像您的示例一样,但得到了Eù1ù-ù(ù
而不是محبا
我缺少AT+CSMP=1167,0,8
调用AT+CSCS=?
并且我得到了+CSCS:(“GSM”、“PCCP437”、“CUSTOM”、“HEX”)
,无法设置AT+CSCS=“UCS2”
然后选择十六进制。你需要将文本字符串编码为十六进制。检查一下:我想我的配置有误,我发送了06450631062D06280627
就像你的示例一样,但是得到了Eù1ù-ù(ù)
而不是I>CSMP=1167,0,8