2016-03-13 1 views
0

Je peux envoyer n'importe quel message Unicode sms à une partie ou à plusieurs parties en utilisant python gsmmodem. voici mon code:comment envoyer des sms unicode multipart en utilisant la bibliothèque python gsmmodem?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import print_function 

import logging 

PORT = '/dev/ttyUSB2' 
BAUDRATE = 115200 
PIN = None 

from gsmmodem.modem import GsmModem 

def main(): 
    print('Initializing modem...') 
    modem = GsmModem('/dev/ttyUSB2', 115200) 
    modem.smsTextMode = False 
    modem.connect(PIN) 

    try: 
     message = u'ننننننننننننن نننننننتتتتتتتتتتت تتتتتتتتتتتتتتتت تتتتتتتتتتتتت تتتتتتتتت تتتتتتتتتتتتتتتتتتت تتتتتتت تتتتتتتتتتتتتتت تتتتتتتتتتتتتت تتتتتتتتتت' 
     modem.sendSms('09355666238' , message) 
    finally: 
     modem.close(); 

if __name__ == '__main__': 
    main() 

il envoie une partie des messages Unicode (moins de 70 caractères) avec succès, mais pour les messages avec plus de 70 caractères est de lancer ce message d'erreur:

File "/usr/local/lib/python2.7/dist-packages/gsmmodem/modem.py", line 631, in sendSms 
pdus = encodeSmsSubmitPdu(destination, text, reference=self._smsRef) 
File "/usr/local/lib/python2.7/dist-packages/gsmmodem/pdu.py", line 341, in encodeSmsSubmitPdu 
pdu.append(userDataLength) 
ValueError: byte must be in range(0, 256) 

comment je peux envoyer un message sms unicode multipart en utilisant python?

Répondre

0

Je ne connais pas la bibliothèque, mais les chaînes Unicode ne sont pas des octets. Essayez de les encoder en octets avant de les transmettre. UTF-8 est un bon choix car il prend en charge toute la gamme Unicode.

message.encode('utf8') 

Cependant, le message d'erreur indique la bibliothèque a essayé de faire un codage, et n'a pas réussi à ajouter la longueur des données. Peut-être que les données codées en octets internes à la bibliothèque ne peuvent pas dépasser 255? La longueur de votre échantillon message est de 277 octets codés en UTF-8.

1

La méthode sendSms prend une chaîne Unicode et détecte automatiquement si elle peut être codée en tant que GSM-7 7 bits ou UCS2 16 bits. Pour le GSM-7, les messages longs doivent être divisés en blocs de 153 caractères, et pour UCS2, ils doivent être divisés en blocs de 67 caractères (en raison de l'encodage à deux octets).

Malheureusement, la python-gsmmodem actuelle sur PyPI (version 0.9) tente de diviser tous messages longs en 153 morceaux de caractères, qui échouera si le message contient des caractères en dehors de la GSM-7 range.

Ce problème était fixed in Dec 2013, mais n'est pas encore inclus dans la version actuelle de python-gsmmodem (publiée en juillet 2013). Il ne semble pas y avoir de solution simple pour corriger le correctif, il semblerait donc que vous ayez besoin d'installer la dernière version de github si vous avez vraiment besoin d'envoyer des messages Unicode en plusieurs parties.

0

J'utilise Python-gsmmodem pour mon application pour envoyer et recevoir des SMS. En utilisant Python-gsmmodem 0.9, j'ai eu quelques problèmes tels que l'encodage Unicode, timeout dans la méthode connect puis j'ai essayé Python-gsmmodem-new 0.1, il semble que ces problèmes ont été corrigés dans cette version.