Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java发送unicode短信_Java_Sms_Gsm - Fatal编程技术网

使用java发送unicode短信

使用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

我通过GSM设备发送短信,请尝试以下操作:

它可以发送普通短信,我尝试发送Unicode文本,但它会自动转换为ASCII:
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