使用 AT 命令发送包含表情符号的短信
Send SMS containting Emojis with AT Commands
我想使用 AT 命令从我的 GSM 调制解调器发送包含表情符号的短信。
然而,无论我尝试哪种编码,它都无法正常工作(Encoding.BigEndianUnicode
、Encoding.Unicode
或 Default
),使短信无法读取。
我的代码看起来有点像这样:
// [..]
// send message with UCS2
command = "AT+CSCS=\"UCS2\"" + char.ConvertFromUtf32(13);
send(command);
// [..]
// convert my message (string from a WPF TextBox) to a unicode hex-string
byte[] ba = Encoding.BigEndianUnicode.GetBytes(message);
var hexString = BitConverter.ToString(ba);
hexString = hexString.Replace("-", "");
// send the converted string
command = hexString + char.ConvertFromUtf32(26);
send(command);
// [..]
短信成功到达目的地,但消息只是一些不可读的东西。
这甚至可以做到吗?我的 GSM 调制解调器也支持 "HEX" 作为编码。
更新:
如果我替换这一行,它有点管用:
command = hexString + char.ConvertFromUtf32(26);
有了这个:
command = "80 " + hexString + char.ConvertFromUtf32(26);
但是后来我在消息的开头收到了这个㣩字母...
确保您的调制解调器使用正确的 SMS 数据编码方案。参见 this answer 和
- 使用
AT+CMGF=1
将调制解调器设置为文本模式
- 使用
AT+CSCS="UCS2"
将编码方案设置为 "UCS2"
- 发送
AT+CSMP=1,167,0,8
到调制解调器。
- 现在在 UCS2 模式下,调制解调器也需要 UCS2 格式的收件人号码,即
+123456890
发送
AT+CGMS="002B003100320033003400350036003800390030",145
(对于带有国家代码的号码,145 是 type-of-address,否则使用 129
。
- 调制解调器应以
>
提示响应。然后,以正确的编码发送消息,即将消息发送为我将描述为 UCS2/UTF-16 字节的 ASCII 十六进制序列,即将字符串编码为 UTF-16BE,然后获取每个字节并将其格式化为 ASCII HEX字符,即发送到调制解调器的 U+1F408
变为 D83DDC08
,012ABC
变为 003000310032 004100420043
.
我想使用 AT 命令从我的 GSM 调制解调器发送包含表情符号的短信。
然而,无论我尝试哪种编码,它都无法正常工作(Encoding.BigEndianUnicode
、Encoding.Unicode
或 Default
),使短信无法读取。
我的代码看起来有点像这样:
// [..]
// send message with UCS2
command = "AT+CSCS=\"UCS2\"" + char.ConvertFromUtf32(13);
send(command);
// [..]
// convert my message (string from a WPF TextBox) to a unicode hex-string
byte[] ba = Encoding.BigEndianUnicode.GetBytes(message);
var hexString = BitConverter.ToString(ba);
hexString = hexString.Replace("-", "");
// send the converted string
command = hexString + char.ConvertFromUtf32(26);
send(command);
// [..]
短信成功到达目的地,但消息只是一些不可读的东西。
这甚至可以做到吗?我的 GSM 调制解调器也支持 "HEX" 作为编码。
更新: 如果我替换这一行,它有点管用:
command = hexString + char.ConvertFromUtf32(26);
有了这个:
command = "80 " + hexString + char.ConvertFromUtf32(26);
但是后来我在消息的开头收到了这个㣩字母...
确保您的调制解调器使用正确的 SMS 数据编码方案。参见 this answer 和
- 使用
AT+CMGF=1
将调制解调器设置为文本模式
- 使用
AT+CSCS="UCS2"
将编码方案设置为 - 发送
AT+CSMP=1,167,0,8
到调制解调器。 - 现在在 UCS2 模式下,调制解调器也需要 UCS2 格式的收件人号码,即
+123456890
发送AT+CGMS="002B003100320033003400350036003800390030",145
(对于带有国家代码的号码,145 是 type-of-address,否则使用129
。 - 调制解调器应以
>
提示响应。然后,以正确的编码发送消息,即将消息发送为我将描述为 UCS2/UTF-16 字节的 ASCII 十六进制序列,即将字符串编码为 UTF-16BE,然后获取每个字节并将其格式化为 ASCII HEX字符,即发送到调制解调器的U+1F408
变为D83DDC08
,012ABC
变为003000310032 004100420043
.
"UCS2"