URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7054
[ Назад ]

Исходное сообщение
"device::gsm device::gsm:sms отправка рус sms под perl через gsm модем"

Отправлено bytestore , 20-Дек-07 17:37 
У когонибудь получилось отправлять этим модулем русские sms через ком порт??
use Device::Gsm;
$content = "ТЕСТ";
my $gsm = new Device::Gsm( port => '/dev/cuad0' );
         if( $gsm->connect() ) {
             print "connected!\n";
         } else {
             print "sorry, no connection with gsm phone on serial port!\n";
         }

my $lOk = $gsm->send_sms(
    content => $content,
    recipient => '+7ххххххххх',
    class     => 'normal',     # try `flash'
    mode      => 'pdu'
                        );
if( $lOk ) {
print "SMS check money sent!\n" ;
    } else {
        print "Error in sending!\n";
        exit ;
            }

на трубку приходит "ôåóô"
я понимаю что это UTF8, пробовал набить в кодировке UTF8, на трубку приходит "DcDDiDc"
конвертировал всеми возможными способами, безрезультатно :(
в модуле gsm.pm нашел строки которые кодируют мессагу перед отправкой
        # Encode text
        $text = Device::Gsm::Charset::iso8859_to_gsm0338( $text );
        my $enc_msg = Device::Gsm::Pdu::encode_text7( $text );
пробовал закоментировать эту функцию, с сделать
        my $enc_msg = $text;
тогда вообще не отсылает видимо формат PDU нарушается


Содержание

Сообщения в этом обсуждении
"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено vic , 20-Дек-07 18:08 
>$content = "ТЕСТ";

И какая у вас кодировка?

> $text = Device::Gsm::Charset::iso8859_to_gsm0338($text);

тут из  кодировки 8859 делается некая gsm0338
> my $enc_msg = Device::Gsm::Pdu::encode_text7($text);

тут конвертируется видимо в 7битку

итого текст должен быть в iso8859,но т.к. iso8859 это еще не русские буквы то надо искать
что нить типа Device::Gsm::Charset::ВАША_КОДИРОВКА_to_gsm0338($text);


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено bytestore , 20-Дек-07 18:33 
>[оверквотинг удален]
>> $text = Device::Gsm::Charset::iso8859_to_gsm0338($text);
>
>тут из  кодировки 8859 делается некая gsm0338
>> my $enc_msg = Device::Gsm::Pdu::encode_text7($text);
>
>тут конвертируется видимо в 7битку
>
>итого текст должен быть в iso8859,но т.к. iso8859 это еще не русские
>буквы то надо искать
>что нить типа Device::Gsm::Charset::ВАША_КОДИРОВКА_to_gsm0338($text);

У меня koi8r
>>что нить типа Device::Gsm::Charset::ВАША_КОДИРОВКА_to_gsm0338($text);

Пробовал закоментить строку перекодирования в модуле и сам кодировал
Encode::from_to($content, 'koi8r', 'gsm0338');
выползают "????"


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено vic , 20-Дек-07 18:56 
Девайс с русскими буквами вообще работает? Шрифты?

>У меня koi8r

а принимает 8859
т.е. надо
Encode::from_to($content, 'koi8r', 'iso8859');
но т.к. в iso8859 будут крякозябы.. хм.. надо читать доки на девайс..

хм.. пока ничего не могу посоветовать..



"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено exn , 21-Дек-07 00:23 
ух ты, модулёг.. ыы.
Помницо трахался с pdu и 7ми ботной кодировкой. А тут все из коробки.
Радуйтесь


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено bytestore , 21-Дек-07 09:52 
>[оверквотинг удален]
>
>>У меня koi8r
>
>а принимает 8859
>т.е. надо
>Encode::from_to($content, 'koi8r', 'iso8859');
>но т.к. в iso8859 будут крякозябы.. хм.. надо читать доки на девайс..
>
>
>хм.. пока ничего не могу посоветовать..

Да девайс с русскими работает, принимает смс нормально
$koi8_str = $koi8->to8(utf8($text)->utf16);
таким образом перекодирую sms в koi8

>>Encode::from_to($content, 'koi8r', 'iso8859');

Может должна быть iso8859-5 это вроде русская как я понимаю,
а iso8859-1 это обычная latin1


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено lisolog , 25-Окт-10 16:55 

>>>Encode::from_to($content, 'koi8r', 'iso8859');
> Может должна быть iso8859-5 это вроде русская как я понимаю,
> а iso8859-1 это обычная latin1

Бьюсь с аналгичной проблемой.
Локаль UTF8.
Никакие выкрутасы с перекодировками из вышеописанных не помогают.

Кто как решил проблему?


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено raruri , 21-Янв-11 22:22 
неужели никто так и не решил проблему??????

"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено bytestore , 24-Янв-11 13:24 
> неужели никто так и не решил проблему??????

Да я забросил, но помню что вроде модули поддержку влючили в режим PDU


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено raruri , 24-Янв-11 17:25 
Решил проблему программой smstools.
Все отлично отправляет и по русски))))

"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено jonson , 30-Янв-11 20:29 
> Решил проблему программой smstools.
> Все отлично отправляет и по русски))))

как в smstools добился русских смс?


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено raruri , 31-Янв-11 07:59 
>> Решил проблему программой smstools.
>> Все отлично отправляет и по русски))))
> как в smstools добился русских смс?

все заработало само после установки
отсылаю смс "sendsms tel 'text'", кодировка Юникод


"device::gsm device::gsm:sms отправка рус sms под perl через ..."
Отправлено svi , 12-Июл-11 11:19 
Если еще актуально - получилось. После легкой рихтовки Gsm.pm
Исправленный можно взять здесь: http://webfile.ru/5434167

"дополнение"
Отправлено svi , 12-Июл-11 11:36 
> Если еще актуально - получилось. После легкой рихтовки Gsm.pm
> Исправленный можно взять здесь: http://webfile.ru/5434167

Строка, передаваемая модему, должна быть уже в правильной кодировке:

use Encode qw/encode decode from_to/;
...
my $sms_text = 'Ваш баланс пополнен на 1000 руб.';
from_to($txt, "CP1251", "UCS2");
...
  my $sent = $gsm->send_sms(
      recipient => '+7920xxxxxxx',
      class => 'flash',
      content   => $sms_text,
      mode => 'pdu'
  );