AT+CUSD指令:响应编码

AT+CUSD command: Response encoding

我正在向 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"

也尝试过:

AT+CSCS="GSM"
AT+CSCS="UTF-8"

实际 Ussd 命令:

AT+CUSD=1,"*123#",15

实际响应:

+CUSD: 1,"c47258e1ad7e7f477bb2c6781e0ec72785e691d36136481593cd54f6777d8c2ecb23e1313d6dfd3d36f7764fc26974720fa1b242f8fd161f9b9cc",1

OK

预期响应:

AT+CUSD=1,"*123#",15

+CUSD: 1,"Dear Customer.... some response in english",1

看起来像是调制解调器解码问题。应该通过使用大多数调制解调器的标准 IRA 编码来解决。

尝试使用:

AT+CSCS="IRA"

然后尝试 USSD 命令再次获得响应。

作为旁注,您可以通过以下方式输出调制解调器的可用编码功能:

AT+CSCS=?

USSD 编码为 7 位 GSM 或 UC2。要使用 7 位进行解码,请查看 3GPP ETSI 03.38。要解码 UC2,这基本上是 UTF-16,所以 2 个字节定义一个字符。

尝试使用 7 位:

C4    1 1000100     100 0100     D
72    01 110010     110 0101     e
58    010 11000     110 0001     a
E1    1110 0001     000 1010     <LF>
AD    10101 101     101 1110     ü
7E    011111 10     101 0101     U
7F    0111111 1     101 1111     §
47    0 1000111     011 1111     ?
7B    01 111011     100 0111     G

Dea<LF>üU§?G

开始使用 7 位时还不错,但在 3 个字符后就变成垃圾了。

尝试使用 UC2 只会产生垃圾。

结论:可能是所用调制解调器的特定问题(了解它是哪个制造商型号仍然很有用)。或者你是如何连接到调制解调器的(考虑到 USSD 字符串不是有效的十六进制字符串,因为它的长度不均匀)。

帖子有点旧,但这可能会对来到这里的人有所帮助!

格式显然是十六进制UC2,16位标准字符!所以你应该把它转换回一个可读的字符串!如果您知道如何编程,那将是一项简单的任务!创建你的功能来做到这一点!取每4个字符!将它们放在 $hex ==> 将它们转换为 char! php 中的示例!你用两个函数 chr(hexdec($hex)) 那样做! WELL FOR NO PROGRAMERS!看看这个页面 online converter

太多太多都不行!在所有情况下!这个不错!比那更好!是您可以将完整页面保存在您的电脑中!并在离线时使用它!他们已经在 javascript 中实施了!它包括在内!太棒了!

程序员现在好了!我在 php 中创建了一个函数!我正在做某事!使用 AT 命令!在这里我创建了自己的功能!也许它会对你有所帮助!

here is the file ! couldn't post it as code directly here! some not simple (identation thing!) => it's a doc file on my google drive

希望对您有所帮助!!!