如何将变音符号发送到带有 GSM 模块的智能手机?

问题描述 投票:0回答:1

我使用 Python 在连接到 GSM 模块的 Raspberry Pi 4B 上构建了一个 SMS 服务器。这是我使用 Waveshare Wiki 的 GSM 模块。我可以向我的客户发送短信,告知他们有关订单的信息。

我的问题是我无法发送像“ÄäÖöÜü”这样的变音符号和像“ß”这样的特定字符。每当我尝试将它们发送到我自己的手机时,它们都会被其他字符取代。例如,“ä”被“@¤”取代。

我使用 AT+CSCS="GSM" 将模块设置为 GSM 字符集,并使用 AT+CMGF=1 以纯文本形式发送 SMS。 我的主要问题是:有谁知道我可以尝试正确发送变音符号吗?

变音符号全部正确传输到 SMS 服务器,然后服务器使用 pySerial 库将它们发送到 GSM 模块。

serial.write(sms_text.encode('utf-8'))

我想可能GSM模块的字符集没有变音符号。每个 GSM 模块是否有自己的字符集或是否有相应的标准?

python raspberry-pi pyserial gsm at-command
1个回答
0
投票

根据SIM 800 AT命令手册,在3.2.12段,模块支持以下字符集:

“GSM” - GSM 7 位默认字母表 (3GPP TS 23.038);
"UCS2" - 16 位通用多八位字节编码字符集 (ISO/IEC10646); UCS2字符串转换为16进制数,从0000到FFFF;例如"004100620063" 等于十进制值 65、98 和 99 的三个 16 位字符
“IRA” - 国际参考字母表 (ITU-T T.50)
"HEX" - 字符串仅由从 00 到 FF 的十六进制 bers 组成;
"PCCP" - PC字符集代码
“PCDN” - PC 丹麦语/挪威语字符集“8859-1”ISO 8859 拉丁语 1 字符集

在你的情况下,我会尝试至少两个选项:

  1. PCDN - 丹麦语/挪威语字符集

    发送指令

     AT+CSCS="PCDN"
    

    将字符正常写入串口。此字符集支持您需要的字符,如本代码表中所述。

  2. UCS2 - Unicode

    发送指令

     AT+CSCS="UCS2"
    

    并且,对于每一个你需要打印的字符,将其代码对应的4个十六进制字符写入serial,如下面的代码表.
    例如,字符

    Ö
    可以通过向
    +CMGS
    命令写入代码
    00D6
    .

    来获得

如果第一个解决方案有效,你就没事了。第二种解决方案的缺点是需要对要发送的每个字符进行编码,但可以让您准备好支持世界上几乎所有字符集。

© www.soinside.com 2019 - 2024. All rights reserved.