Отправка смс с помощью провайдера bulksms
Я использую службу смс, https://www.bulksms.com/,
Я не могу отправить арабское сообщение из-за кодировки.
message = بريستيج
vals = {
'username': gateway.login,
'password': gateway.password,
'message': message,
'msisdn': mobile,
}
urllib.urlencode(vals)
req = urllib2.Request(url, params)
f = urllib2.urlopen(req)
UnicodeEncodeError: кодек "ascii" не может кодировать символы в позиции 0-6: порядковый номер не в диапазоне (128)
Я исправил эту проблему с: message.encode('utf8')
но при отправке сообщения замените char на ??? ??????
голец
Спасибо за помощь
1 ответ
Предполагая, что вы используете более старый EAPI BulkSMS.com, для SMS с Unicode вам придется добавить dca=16bit
на URL-адрес и закодируйте текст сообщения в шестнадцатеричном виде - см. Как отправлять Unicode (16-битные) SMS? в FAQ.
Было бы гораздо проще использовать более новый JSON API, который будет делать примерно то, что вы ожидали, во-первых, без дополнительных усилий:
# coding=utf-8
import json
import urllib
import urllib2
import base64
data = {
'to': '+1234567890',
'body': 'بريستيج'
}
encodedData = json.dumps(data, encoding="utf-8", ensure_ascii=False)
request = urllib2.Request('https://api.bulksms.com/v1/messages?auto-unicode=true')
request.add_header('Content-Type', 'application/json;charset=utf-8')
base64string = base64.b64encode('%s:%s' % ('your_username', 'your_password'))
request.add_header("Authorization", "Basic %s" % base64string)
f = urllib2.urlopen(request, encodedData)
response = f.read()
f.close()
print response