3

我用 python 发送 USSD 请求并打印响应。我的英文回复是正确的,但是当 USSD 回复不是英文时,我会得到类似

97D34B7889877A547B49F9C600E12B944C6C9968D06DFC1855CC842014A0BBA6AE419C5109EC4E0A00

我怎样才能得到波斯的回应?

我的代码:

phone = serial.Serial("COM4",  115200, timeout=5)
try:
    phone.write(b'AT+CUSD=1,\"*140*11#\",15\r')
    print b'AT+CUSD=1,\"*140*11#\",15\r'
    time.sleep(.5)
    print phone.readall()
finally:
    phone.close()
4

3 回答 3

2

您必须重新编码您的十六进制响应:

hex_ussd = '97D34B7889877A547B49F9C600E12B944C6C9968D06DFC1855CC842014A0BBA6AE419C5109EC4E0A00'

good_ussd = unicode(hex_ussd.decode('hex'), 'utf-16-be').encode('utf8')

print good_ussd
于 2016-02-29T18:06:19.880 回答
0

一个问题是您在 AT 命令中指定了编码方案“GSM 7 bit with unspecified language”,这是参数“15”:

AT+CUSD=1,\"*140*11#\",15\r

请参阅规范文档 3GPP TS 27.007 第 7:15 节以获取对此的解释。

这对英语来说是可以的,它可以用 7 位字母表来定义。
但由于 Persion 不能由 GSM 7 位字母表定义,我猜测如下:调制解调器收到了一个以其他方式定义的字符串(通过 8 位或 16 位(UCS)编码方案)。因为调制解调器要么无法处理这种语言,要么无法将字符串与您的 7 位编码请求相一致,它只会将整个字符串发送给您。

您是否尝试过将该字符串分成双八位字节(16 位),并将其与波斯字母相匹配?可能你会在那里找到你的信息。

要指定波斯语,您可以尝试 00010001(“17”),然后您会期望收到一个 16 位字符的字符串,前面有一个语言指示符。但我认为本质上,这就是你已经拥有的。所以也许你将不得不做你自己的解码器。

对不起,更多的是一个启发性的猜测而不是一个具体的答案。

于 2013-06-14T09:26:56.200 回答
0

这对我来说非常有效。我正在使用 python gsmmodem 和 python simplesms。

pip install python-gsmmodem
pip install simplesms



from gsmmodem.modem import GsmModem
from simplesms import pdu as gsmpdu
PORT = '/dev/ttyUSB0' #Port your gsm modem is connected to.
PIN = None # SIM card PIN (if any)
BAUDRATE = 115200
USSD_STRING = '*140*11#'

modem = GsmModem(PORT, BAUDRATE)
modem.connect(PIN)
modem.waitForNetworkCoverage(10)

#encode ussd string
encoded_ussd_strint = gsmpdu.encode(USSD_STRING)

#send encoded ussd string
response = modem.sendUssd(encoded_ussd_strint)

#decode encoded ussd response
decoded_response = gsmpdu.decode(response.message)

print 'USSD reply received: {0}'.format(decoded_response)
if response.sessionActive:
    print 'Closing USSD session.'
    # At this point, you could also reply to the USSD message by using response.reply()
    response.cancel()
else:
    print 'USSD session was ended by network.'
于 2015-09-29T06:35:04.630 回答