我是python的初学者,但是这里有问题,当我们发送短信语言unicode(印地语,阿拉伯语等),但短信没有发送。我能做什么,请帮助我。 如果您有任何想法,请告诉我如何使用调制解调器或加密狗发送多语言短信。
def recept(message, recipient):
time.sleep(0.5)
phone.write('AT\r\n')
time.sleep(0.5)
phone.write('AT+CMGF=1\r\n')
time.sleep(0.5)
phone.write('AT+CMGW="'+recipient+'"\r\n')
out = ''
time.sleep(1)
while phone.inWaiting() > 0:
out += phone.read(1)
if out != '':
print ">>" + out
phone.write(message)
phone.write('\x1a')
out = ''
time.sleep(1)
while phone.inWaiting() > 0:
out += phone.read(1)
if out != '':
print ">>" + out
number = get_num(out)
phone.write('AT+CMSS='+number+'\r\n')
out = ''
time.sleep(1)
while phone.inWaiting() > 0:
out += phone.read(1)
if out != '':
print ">>" + out
def sendSMS(message):
try:
phone.open()
phone.flushInput()
phone.flushOutput()
for row in mobileno:
time.sleep(0.5)
mobile = row
recept(message, mobile)
time.sleep(1)
phone.write('AT+CMGD=1,4\r\n')
phone.close()
finally:
phone.close()
# type your message here
message = u'लड़की के चक्कर में मत पड़ना भाई'
sendSMS(message)
+++++++++++++++++ ERROR ++++++++++++++++++++++
लड़की के चक्कर में मत पड़ना भाई
>>AT
OK
AT+CMGF=1
OK
AT+CMGW="Phone number with country code"
>
Traceback (most recent call last):
File "right.py", line 76, in <module>
sendSMS(message)
File "right.py", line 65, in sendSMS
recept(u'लड़की के चक्कर में मत पड़ना भाई', mobile)
File "right.py", line 40, in recept
phone.write(u'लड़की के चक्कर में मत पड़ना भाई')
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 491, in write
d = to_bytes(data)
File "/usr/local/lib/python2.7/dist-packages/serial/serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer or string of size 1 is required
提前致谢
答案 0 :(得分:0)
看看this question about sending Unicode messages。它是关于C#的,但SMS部分适用。它引用了tutorial on sending SMS,您可能希望查看其“发送Unicode SMS消息”部分。
AFAICT,您的代码有这两个问题
首先,您没有指定编码,这意味着“纯文本”,大约是7位或8位GSM 03.38。您需要配置支持阿拉伯语和印地语的编码,例如HEX:
phone.write('AT+CSCS="HEX"\r\n');
然后你可能需要指定数据编码方案(最后一部分,8,是DCS的相关部分):
phone.write("AT+CSMP=1,167,0,8\r\n")
其次,代码崩溃是因为您传递给phone.write()
的邮件属于unicode
类型。串行模块需要一个数字列表(代码点)或字节串。如果您选择上面的HEX
编码,那么您可以像这样转换文字:
"".join([hex(ord(c)).replace("0x", "0") for c in u"लड़की के चक्कर में मत पड़ना भाई"])
(也许有更好的方法,但是binascii.hexlify没有生成正确的格式。)
在你的情况下,这给出了:
'0932095c0915094002009150947020091a0915094d09150930020092e09470902020092e0924020092a095c0928093e020092d093e0908'
尝试发送此内容,而不是u"लड़की के चक्कर में मत पड़ना भाई"
。
当然,所有这些都假设您的调制解调器首先支持Unicode消息。请参阅上面提到的有关如何检查的教程。
另请注意,另一个问题的OP与"\r"
的行结尾存在问题。如果您遇到问题,请尝试改为使用"\n"
。
如果您对发送邮件更感兴趣,而在构建它的方面更少,则可能需要考虑提供Twilio或Nexmo等服务相对易于使用的API,用于发送短信。