![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
Добрый день.
Не могу разобраться с Encode вытаскиваю тело СМС-сообщения из GSM-модема и дальше при выводе тела в файл или в ст.выход вижу собщение "Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 182, <DATA> line 164."... ну и выводит естественно всякую билиберду и символов в ней, естественно, ровно в 2 раза больше, чем в отправленном на модем смс-сообщении. Сразу говорю что это под WinXP (ActivePerl 5.8). Я установил все примочки для Encode и далее не могу понять как этим пользоваться. В конечном итоге нужно раскодировать Unicode (UCS-2) в cp1251. Буду благодарен за кусок кода ![]() ![]() |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
это какие? Он и в своём "изначальном" виде прекрасный инструмент... Вы или процитируйте сообщение, или вложите файл, который надо "раскодировать" ;) Добавлено через 2 минуты и 34 секунды тут слишком много раз обсуждалось - так что можете воспользоваться "Поиском" на форуме, думаю достаточно ввести Encode Ещё есть неплохая фича вот по этому адресу (она кстати, выводится уже при создании темы, чтобы могли сразу найти ответ, вдруг вопрос поднимался уже) смотреть тут - http://forum.vingrad.ru/forum/topic-161775...845/0.html#look |
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
kain76, функция decode тебе поможет
![]() -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
|
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
GoodBoy, sharq, тут слишком много про это говорилось... я бы сказал больше, но сам уже "тыщу" раз отвечал... пусть научится пользоваться поиском, он ведь рабочий ;)
|
|||
|
||||
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
Я искал на форуме и видел здесь эту фичу, но в этих темах конкретно не упоминали про то, как избавиться от лишних (не буквенных) данных в строке. Я так понимаю, что строка, которую я упомянул выводится именно из-за присутствия "описывающих" байтов, которые не декодируются.. Где-то в доках на CPAN я находил что-то об этом, но не могу найти снова. Вот и думал может кто подскажет как от них избавиться.. Encode в поиске ничего толкового не дал
Это сообщение отредактировал(а) kain76 - 4.7.2007, 04:52 |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
неправильно понял, они все такие, а точнее вы неверно используете Encode, ещё более точно кодировку ![]() Ещё раз повторю: http://forum.vingrad.ru/index.php?showtopi...t&p=1183963 Сам вывел поиск, есть там... Вам уже подсказил - Encode::decode P.S.: Вы приведите пример текста!!! И будет вам счастье... Это сообщение отредактировал(а) nitr - 4.7.2007, 11:17 |
|||
|
||||
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
вот как я пытаюсь это вывести:
######################## use Device::Gsm; use Encode qw(encode decode); my $mystr; my $gsm = new Device::Gsm( port => 'COM3', pin => '' ); if( $gsm->connect() ) { print "connected!\n"; } else { print "sorry, no connection with gsm phone on serial port!\n"; } # Get list of Device::Gsm::Sms message objects # see `examples/read_messages.pl' for all the details my @messages = $gsm->messages(); # II. Recieving messages open(FILE, ">>SMS.txt"); for( $gsm->messages('SM') ) { print FILE $_->content(), " : ", $_->sender(), "\n"; $cont=$_->content(); $mystr = encode('cp1251', decode('UCS-2', $cont)); print FILE "$mystr"; } close (FILE); ############################### сам текст оттуда выколупывает Device::Gsm и мне он в первой строке возвращается в таком виде " Р_С_С%РёС' : +79098316102 " (кодировке винды), а вторая строка вообще отсутствует. Сам текст в SMS по идее - "Оущит" (был с похмелья:) так вот в итоге ругается так: Wide character in print at C:\Perl\scripts\1.pl line 38, <DATA> line 164. Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 162, <DATA> line 164. Первая строка записывается в файл, а вторая - пустая. Такие дела. Как бороться? |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
верно так, т.к. utf8
|
|||
|
||||
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
nitr, поменял на utf8.. теперь так говорит
Wide character in print at C:\Perl\scripts\1.pl line 38, <DATA> line 164. Cannot decode string with wide characters at C:/Perl/lib/Encode.pm line 162, <DATA> line 164. А вобще я читал, что SMS-сообщения передаются и хранятся в кодировке UCS-2.. тока там не уточняется LE или BE.. собственно я разницы не знаю, знаю только что их две. |
|||
|
||||
nitr |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
kain76, тогда стоит вложить файл с текстом сообщения
![]() ![]() Даже если то что вы привели -
можно проверить тупо:
результат
А unicode выведет - угадайте?! Конечно в "китайской или иной" - короче иероглифы, самые настоящие... Добавлено через 12 минут и 40 секунд какая ОС? ![]() |
||||||
|
|||||||
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
Я писАл в первом сообщении: "Сразу говорю что это под WinXP (ActivePerl 5.8)"
Вложить какой файл? с каким сообщением? ![]() вот это вот сработало (действительно в utf8.. собсно чего я и хотел узнать ![]() for( $gsm->messages('SM') ) { $cont=$_->content(); $mystr = encode('cp1251', $cont); print FILE "$mystr\n"; } но блин всё равно ругается на "Wide characters" Вобщем, всем большое спасибо. Буду знать теперь куда обратиться. |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
kain76, просто у вас странно приведён пример сообщения, вот и запутали с ОС.
А как можно, как пример ниже, (плюньте временно на "Wide... "), а прикрепите полученный файл content.txt к сообщению на форуме...
Будет сподручнее помогать ;) Тем более кроме меня тут много людей, кто сможет помочь... |
|||
|
||||
kain76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2007 Репутация: нет Всего: нет |
понятно, я просто не думал что кто-то будет ковырять контент, чтобы выяснить какая кодировка
![]() прикрепил файл с телом одного сообщения.. в оригинале текст - "Приз". может быть удастся выяснить что там за символы загадочные Только открывайте не в виндовых приложениях, потому что они автоматом перекодируют содержание Это сообщение отредактировал(а) kain76 - 9.7.2007, 01:13 Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() |
|||
|
||||
nitr |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
kain76, пока непонятно почему вы игнорируете ответы выше
![]() ![]()
Ваше сообщение в кодировке utf8, данный скрипт переводит в кодировку cp1251, так что не вижу чего-то уж неверного или нерабочего?! можно в Виндовой "консоле" ![]()
Это из-за того, что вы утверждаете, будто бы не работает ![]() Думаю ошибка уже кроется дальше... в выводе "ГОТОВОГО" сообщения... Куда вы его выводите, в какой вид или в какой кодировке? ;) Добавлено @ 01:18 Поэтому (код уж очень похож на прежние ответы из других похожих тем) я "советовал пользоваться поиском", т.к. такую проблему уже решали ни один раз... ;) Это сообщение отредактировал(а) nitr - 9.7.2007, 01:29 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |