Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误发生:当我们使用gsm调制解调器或加密狗发送unicode短信时_Python_Django_Python 2.7_Pyserial_Sms Gateway - Fatal编程技术网

Python 错误发生:当我们使用gsm调制解调器或加密狗发送unicode短信时

Python 错误发生:当我们使用gsm调制解调器或加密狗发送unicode短信时,python,django,python-2.7,pyserial,sms-gateway,Python,Django,Python 2.7,Pyserial,Sms Gateway,我是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

我是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
def recept(消息,收件人):
睡眠时间(0.5)
phone.write('AT\r\n')
睡眠时间(0.5)
phone.write('AT+CMGF=1\r\n')
睡眠时间(0.5)
phone.write('AT+CMGW=“'+recipient+'”\r\n')
out=“”
时间。睡眠(1)
while phone.inWaiting()>0:
输出+=电话。读取(1)
如果退出!='':
打印“>>”+输出
电话。写(短信)
phone.write(“\x1a”)
out=“”
时间。睡眠(1)
while phone.inWaiting()>0:
输出+=电话。读取(1)
如果退出!='':
打印“>>”+输出
数量=获取数量(输出)
phone.write('AT+CMSS='+number+'\r\n')
out=“”
时间。睡眠(1)
while phone.inWaiting()>0:
输出+=电话。读取(1)
如果退出!='':
打印“>>”+输出
def发送短信(信息):
尝试:
phone.open()
phone.flushInput()
phone.flushOutput()
对于mobileno中的行:
睡眠时间(0.5)
移动=行
接收(信息、手机)
时间。睡眠(1)
phone.write('AT+CMGD=1,4\r\n')
电话。关闭()
最后:
电话。关闭()
#在此处键入您的消息
消息=u'लड़की के चक्कर में मत पड़ना भाई'
发送短信(短信)
+++++++++++++++++错误++++++++++++++++++++++
लड़की के चक्कर में मत पड़ना भाई
>>在
好啊
AT+CMGF=1
好啊
AT+CMGW=“带有国家代码的电话号码”
> 
回溯(最近一次呼叫最后一次):
文件“right.py”,第76行,在
发送短信(短信)
sendSMS中第65行的文件“right.py”
接受(u'लड़की के चक्कर में मत पड़ना भाई', (流动电话)
文件“right.py”,第40行,在recept中
打电话,写(u'लड़की के चक्कर में मत पड़ना भाई')
写入文件“/usr/local/lib/python2.7/dist packages/serial/serialposix.py”,第491行
d=到字节(数据)
文件“/usr/local/lib/python2.7/dist packages/serial/serialutil.py”,第76行,以字节为单位
b、 append(item)#这个函数为我们的仿真处理int和str,为python3.x处理int
TypeError:需要大小为1的整数或字符串
提前感谢

请看一看。它是关于C#,但SMS部分适用。它引用了一个,您可能希望查看其“发送Unicode SMS消息”部分

AFAICT,您的代码有以下两个问题

首先,您没有指定编码,这意味着“纯文本”,大约7位或8位。您需要配置支持阿拉伯语和印地语的编码,例如十六进制:

phone.write('AT+CSCS="HEX"\r\n');
然后,您可能需要指定数据编码方案(最后一部分,即8,是DCS的相关部分):

其次,代码崩溃是因为您传递给
phone.write()
的消息类型为
unicode
。串行模块需要一个数字列表(代码点)或bytestring。如果您选择上面的
HEX
编码,则可以像这样转换文本:

"".join([hex(ord(c)).replace("0x", "0") for c in u"लड़की के चक्कर में मत पड़ना भाई"])
(也许有更好的方法,但是binascii.hexlify没有生成正确的格式。)

在您的情况下,这将提供:

'0932095c0915094002009150947020091a0915094d09150930020092e09470902020092e0924020092a095c0928093e020092d093e0908'
尝试发送此信息,而不是
u“लड़की के चक्कर में मत पड़ना भाई"

当然,所有这些都假设您的调制解调器首先支持Unicode消息。有关如何检查这一点,请参阅上面提到的教程

另外请注意,另一个问题的OP在作为行结束时出现了
“\r”
问题。如果遇到问题,请尝试改用
“\n”


如果您更感兴趣的是发送消息,而在构建它的方面则更少,您可能需要考虑诸如OR之类的服务,它提供了可比较容易使用的API来发送SMS。

您得到了什么错误?您应该在您的问题中包含错误信息。@ StillLearnin向下滚动,错误在问题兴趣曲中。估计:DHi mknecht运行py file def recept(消息,收件人)时发生相同问题:time.sleep(0.5)phone.write('AT\r\n')time.sleep(0.5)phone.write('AT+CSCS=“HEX”\r\n');time.sleep(0.5)phone.write('AT+CMGF=1\r\n')time.sleep(0.5)phone.5)write('AT+CSMP=1167,0.5)phone.5)write('AT+CMGW='“+recipient+”“\r\n”)out=''时间。在phone.inWaiting()>0:out+=phone.read(1)if out!='':print“>>”+out phone.write(message)phone.write('\x1a')out=''时间。sleep(1)错误:与上面的问题相同。然后我假设您的
消息仍然是Unicode字符串,并且您没有将其转换为bytestring,请参阅我的“第二点”。@yogeshkumar如果您已经使用了上面的十六进制字符串,那么这意味着您需要删除
u“0932095c09150940020091509470200前面的
u
…“
string。它将此字符串标记为Unicode。我已被检查多次,但问题相同。”
'0932095c0915094002009150947020091a0915094d09150930020092e09470902020092e0924020092a095c0928093e020092d093e0908'