使用 AT 命令发送包含表情符号的短信

Send SMS containting Emojis with AT Commands

我想使用 AT 命令从我的 GSM 调制解调器发送包含表情符号的短信。

然而,无论我尝试哪种编码,它都无法正常工作(Encoding.BigEndianUnicodeEncoding.UnicodeDefault),使短信无法读取。

我的代码看起来有点像这样:

// [..]
// 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

  1. 使用 AT+CMGF=1
  2. 将调制解调器设置为文本模式
  3. 使用 AT+CSCS="UCS2"
  4. 将编码方案设置为 "UCS2"
  5. 发送AT+CSMP=1,167,0,8到调制解调器。
  6. 现在在 UCS2 模式下,调制解调器也需要 UCS2 格式的收件人号码,即 +123456890 发送 AT+CGMS="002B003100320033003400350036003800390030",145(对于带有国家代码的号码,145 是 type-of-address,否则使用 129
  7. 调制解调器应以 > 提示响应。然后,以正确的编码发送消息,即将消息发送为我将描述为 UCS2/UTF-16 字节的 ASCII 十六进制序列,即将字符串编码为 UTF-16BE,然后获取每个字节并将其格式化为 ASCII HEX字符,即发送到调制解调器的 U+1F408 变为 D83DDC08012ABC 变为 003000310032 004100420043.