我正在向 gsm 调制解调器发送 AT+CUSD 命令(拨打 ussd 代码)。它运行良好。手机上的响应也是正确的。但我认为响应是十六进制格式或我未知的某种编码:
GSM 调制解调器硬件:
诺基亚C6-01
使用 USB 电缆连接到笔记本电脑。USB 模式:诺基亚套件
初始化编码的命令:
AT+CSCS=?
+CSCS: ("UCS2","GSM","PCCP437","PCDN","IRA","8859-1","HEX","UTF-8")
AT+CSCS="IRA"
AT+CSCS?
+CSCS: "IRA"
Run Code Online (Sandbox Code Playgroud)
还尝试过:
AT+CSCS="GSM"
AT+CSCS="UTF-8"
Run Code Online (Sandbox Code Playgroud)
实际的 USSD 命令:
AT+CUSD=1,"*123#",15
Run Code Online (Sandbox Code Playgroud)
实际反应:
+CUSD: 1,"c47258e1ad7e7f477bb2c6781e0ec72785e691d36136481593cd54f6777d8c2ecb23e1313d6dfd3d36f7764fc26974720fa1b242f8fd161f9b9cc",1
OK
Run Code Online (Sandbox Code Playgroud)
预期回应:
AT+CUSD=1,"*123#",15
+CUSD: 1,"Dear Customer.... some response in english",1
Run Code Online (Sandbox Code Playgroud)
看起来像是调制解调器解码问题。应通过使用大多数调制解调器的标准 IRA 编码来修复。
\n\n尝试使用:
\n\n\n\n\nAT+CSCS=“IRA”
\n
然后再次尝试USSD命令以获得响应。
\n\n作为旁注,您可以通过以下方式输出调制解调器的可用编码功能:
\n\n\n\n\nAT+CSCS=?
\n
USSD 被编码为 7 位 GSM 或 UC2。要使用 7 位进行解码,请查看 3GPP ETSI 03.38。要解码 UC2,这基本上是 UTF-16,因此 2 个字节定义一个字符。
\n\n尝试使用 7 位:
\n\nC4 1 1000100 100 0100 D\n72 01 110010 110 0101 e\n58 010 11000 110 0001 a\nE1 1110 0001 000 1010 <LF>\nAD 10101 101 101 1110 \xc3\xbc\n7E 011111 10 101 0101 U\n7F 0111111 1 101 1111 \xc2\xa7\n47 0 1000111 011 1111 ?\n7B 01 111011 100 0111 G\n\nDea<LF>\xc3\xbcU\xc2\xa7?G\nRun Code Online (Sandbox Code Playgroud)\n\n7 位开始还不错,但 3 个字符之后就变成垃圾了。
\n\n尝试使用 UC2 只会产生垃圾。
\n\n结论:可能是所使用的调制解调器存在特定问题(了解它是哪个制造商型号仍然有用)。或者如何连接到调制解调器(考虑到 USSD 字符串不是有效的十六进制字符串,因为它的长度不均匀)。
\n