Модераторы: ginnie, korob2001

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как раскодировать cp1251 из Unicode (SMS), декодирование контента SMS 
:(
    Опции темы
kain76
Дата 9.7.2007, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.7.2007

Репутация: нет
Всего: нет



nitr, да я ничего не игнорирую :) я уже ведь написАл, что всё заработало, только ругается на какие-то символы.
насчёт:
Цитата(nitr @  9.7.2007,  01:24 Найти цитируемый пост)
Куда вы его выводите, в какой вид или в какой кодировке? ;)

видимо, я просто не пойму чего я не упомянул в ситуации :-))
я ведь и кусок кода привёл, где видно, что я записываю это в файл "SMS.txt".. так вот всё туда уже записывается в нужном виде (при просмотре файла в кодировке cp1251 я вижу слово "Приз"), но при этом не забыват поругаться на "Wide characters...".

Теперь другой случай. Тупо не могу перекодировать строку "Здравствуй ворлд!" (редактирую в Far'е в кодировке Win) обратно в utf8, чтобы отослать сообщение.. Приходит в SMS какая-то абракадабра, хотя количество символов соответствует исходящему..

уже как только ни пробовал.. подскажите как правильно написАть, пожалуйста.


PM MAIL   Вверх
nitr
Дата 9.7.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



Цитата(kain76 @  9.7.2007,  04:02 Найти цитируемый пост)
 в нужном виде (при просмотре файла в кодировке cp1251 я вижу слово "Приз"), но при этом не забыват поругаться на "Wide characters...".

для этого я и просил показать само сообщение в её исходной кодировке...

Добавлено через 46 секунд
Цитата(kain76 @  9.7.2007,  04:02 Найти цитируемый пост)
Приходит в SMS какая-то абракадабра, хотя количество символов соответствует исходящему..

проверяйте кодировку...

Добавлено через 1 минуту и 26 секунд
похоже вы В ЦЕЛОМ не разобрались с кодировками и модулем Encode (decode encode)


--------------------
PM   Вверх
kain76
Дата 9.7.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.7.2007

Репутация: нет
Всего: нет



Цитата(nitr @  9.7.2007,  09:57 Найти цитируемый пост)
для этого я и просил показать само сообщение в её исходной кодировке...

Я не могу этого сделать.. Просто не знаю как. Это делает Device::Gsm методом content() при передаче ему ссылки на массив сообщения. Как это происходит я не разбирался. Как это выглядит в файле при выводе выводе обработанной ссылки в переменную, а переменной в файл я показывал.
Цитата(nitr @  9.7.2007,  09:57 Найти цитируемый пост)
проверяйте кодировку...

Добавлено через 1 минуту и 26 секунд
похоже вы В ЦЕЛОМ не разобрались с кодировками и модулем Encode (decode encode) 

Ну, наконец-то, Вы поняли в чём проблема :) Так и есть. Стал бы я обращаться сюда, если бы смог разобраться сам? :)
PM MAIL   Вверх
nitr
Дата 10.7.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



Чтобы разобраться в модуле Encode, почитайте документацию, потестируйте. Вам, думаю, поможет "метод тыка"/"метод проб и ошибок"/"метод подбора", т.к. основные кодировки на глаз не определяете, и простые "ошибки" - 
Цитата(kain76 @  9.7.2007,  04:02 Найти цитируемый пост)
Приходит в SMS какая-то абракадабра
тоже. Вам не поможет в этом форум, только вы сами...
Так что, Perl "в руки", и пробуйте, пробуйте, пробуйте...

smile
Цитата
МЕТОД ТЫКА - метод, основанный на использовании недостаточно достоверных или неполных данных для получения научных или практических выводов. Впервые был применен выдающимся немецким математиком и врачом Гансом Фридрихом Тыком (род. около 1317 г. до н.э., по другим источникам - в 523 г. н.э.), производившим вскрытие Буриданова осла для объяснения причин его смерти. Впоследствии метод и был назван по фамилии ученого. 

Метод Тыка позволяет получить практические результаты во многих областях человеческой деятельности даже при полном отсутствии какой-либо информации для научного анализа. Метод состоит в совершении разных действий, которые теоретически могут привести к нужному результату. Метод бывает двух видов - метод научного тыка и метод ненаучного тыка (другое название метода ненаучного тыка - метод проб и ошибок). Разделение этих видов достаточно условно и применяется только постфактум. Если задача решена успешно, значит, она решалась с помощью метода научного тыка, а если задача не решена - применялся метод проб и ошибок.





--------------------
PM   Вверх
Anarki
Дата 10.7.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: нет
Всего: 11



Просто надо использовать encode_utf8 вначале
$stroka в utf8 и содержит всякие wide characters
Код

my $octets = encode_utf8($stroka);
from_to($octets, "utf8", "cp1251");
print $octets;


Это сообщение отредактировал(а) Anarki - 10.7.2007, 10:15


--------------------
PM WWW   Вверх
nitr
Дата 10.7.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



Anarki, я ему об этом уже много раз писал... А если гляните в модуль Encode.pm (не знаю удивитесь или нет) ваша функция аналогична тем, что уже обсуждались...

Anarki, плохие методы вы ему советуете, поиском на форуме можно найти тему, в которой как раз и обсуждали оное - вывод: использовать encodedecode.



--------------------
PM   Вверх
Anarki
Дата 10.7.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: нет
Всего: 11



Цитата(nitr @ 10.7.2007,  14:09)
Anarki, я ему об этом уже много раз писал... А если гляните в модуль Encode.pm (не знаю удивитесь или нет) ваша функция аналогична тем, что уже обсуждались...

Anarki, плохие методы вы ему советуете, поиском на форуме можно найти тему, в которой как раз и обсуждали оное - вывод: использовать encodedecode.

Чем плоха? ВЫ указывали ему искать методом тыка, т.к наверное и не решали подобную проблему!

Цитата

$octets = encode_utf8($string); 

Equivalent to $octets = encode("utf8", $string); The characters that comprise $string are encoded in Perl's internal format and the result is returned as a sequence of octets. All possible characters have a UTF-8 representation so this function cannot fail.



--------------------
PM WWW   Вверх
nitr
Дата 10.7.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



smile

Цитата(Anarki @  10.7.2007,  12:20 Найти цитируемый пост)
Чем плоха? ВЫ указывали ему искать методом тыка, т.к наверное и не решали подобную проблему!

всю тему перечитайте... Ничем неплоха, просто другой способ всех "здешних" ответов...

А ему поможет, только "самообучение"/"тестирование", т.е. ему надо разобраться с этим + его смс "в абракадабре" (результат неверно выбранной кодировки).

Это сообщение отредактировал(а) nitr - 10.7.2007, 13:11


--------------------
PM   Вверх
nitr
Дата 11.7.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



kain76, только что протестил:
Код

...
use Encode 'decode', 'encode';
...

for ( $gsm->messages('SM') ) {   
     $cont = $_->content();
     $mystr = encode('cp1251', $cont);
     print FILE "$mystr\n";

не ругается... 

а обратно -
Код

$sms = decode('cp1251', $mystr);

и "читабельно"...


--------------------
PM   Вверх
kain76
Дата 11.7.2007, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.7.2007

Репутация: нет
Всего: нет



Цитата(nitr @  11.7.2007,  02:01 Найти цитируемый пост)

use Encode 'decode', 'encode';
...

for ( $gsm->messages('SM') ) {   
     $cont = $_->content();
     $mystr = encode('cp1251', $cont);
     print FILE "$mystr\n";


да, всё работает сейчас нормально (в сторону cp1251)

Цитата(nitr @  11.7.2007,  02:01 Найти цитируемый пост)
а обратно -

код Perl
1:

$sms = decode('cp1251', $mystr);

и "читабельно"... 



пробовал.. в смс всё равно приходит ерунда :(

просто я сильно ограничен во времени с этой задачей.. поэтому и обратился. сделал пока транслитом.. буду ковырять

Это сообщение отредактировал(а) kain76 - 11.7.2007, 04:48
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0815 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.