[perl] а в перле подскажите плиз как наверняка узнать кодировку?

Teteshnik

проблематично установить на сервер модуль без инета, а по минному полю ходить нет желания. из тех модулей что есть, ничего не выходит.
текст приходит не понятный. плюс еще в мануале про какое-то преобразование в перловую кодировку пишут. не могу разобраться. нужен работающий пример, от чего отталкиваться.

Bibi

нужны входные данные и описание желаемого результата
на каком языке ожидается входной текст?

Teteshnik

язык русский. хочется функцию с 1 параметром текстом, а на выходе 1 значение - кодировка. я понимаю, что это не реально.
ну может функция будет переводить в разные кодировки и это можно будет вывести на экран и увидеть читается ли.
короче терминал вроде выводит в UTF8. текст приходит якобы в 1251. но не могу прочитать и все. якобы перл еще между делом преобразует в свою внутреннюю кодировку и в ней выводит. может на русском есть ликбез по этому делу. на хабре находил применительно к php. ничо не понял все равно.

Teteshnik

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

Bibi

можешь запостить минимальный релевантный кусок своей программы, который запускается и выдает эту ошибку? о какой ОС идет речь?
внутреннее представление строк в памяти на сегодняшний день совпадает с UTF-8, хорошей документации на русском языке порекомендовать не могу, на английском стоит прочитить вот этот ликбез: http://stackoverflow.com/questions/6162484/why-does-modern-p...

Teteshnik

RedHat 6 вроде. код. вобщем обмениваемся данными с другим сервером. в ответ совали кириллицу. причем ошибки логировались нормально, а нормальный ответ выдавал ошибку. собсно Description содержит кириллицу.

my $ua = new LWP::UserAgent;
my $page = $ua->get($myurl);
my $xml=XML::Smart->new($page->content);
write_log('[Result]='.$xml->{Response}{Result}.
' [ErrCode]=|'.$xml->{Response}{ErrCode}.'|'.
#' [Description]='.$xml->{Response}{Description});
'');

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

Bibi

XML::Smart, на первый и второй взгляд, какой-то мутный модуль. если нет каких-либо причин, обуславливающих выбор, то дефолтом должен быть XML::LibXML.
после беглого прочтения не нашел в нем ничего, что как-то работает с кодировкой данных, следовательно, на вход ему следует подавать декодированные данные.
$page->content возвращает октеты, их следует декодировать. можно использовать $page->decoded_content и рассчитывать на то, что все заголовки установлены корректно, либо, если кодировка известна (например, UTF-8 то сделать $data = Encode::decode('UTF-8', $page->content и уже $data скармливать модулю.
еще один момент — в заголовке xml должна быть указана кодировка, можно брать ее оттуда, если она там есть и если этим данным можно доверять в твоем случае.
плюс, следует отдельно проверить, что write_log правильно работает с выводом.
с виндой особо опыта нет, но из того, что видел — это то, что дефолтная кодировка терминала — cp-866, т.е. отличается от дефолтных настроек кодировки софта, который работает с текстовыми файлами

Teteshnik

учту, спасибо.

Serab

нужны входные данные и описание желаемого результата
1. гавно
2. сделать заебись

Barbie29

в общем виде никак... если у тебя будет слово из 2-х букв, ты не сможешь определить win1251 or koi8-r

Teteshnik

в смысле? какая разница сколько букв?

spitfire

А как ты предлагаешь определить, является ли слово "бНОПНЯ" словом "бНОПНЯ" в KOI8-R или словом "Вопрос" в CP1251? Тут уже надо на частоты и в словари смотреть, а для этого нужно много букв.

Teteshnik

моя фраза про 1 вход и 1 выход - это только хотелка как про мир на земле

apl13

является ли слово "бНОПНЯ" словом "бНОПНЯ" в KOI8-R или словом "Вопрос" в CP1251?
Уже давно с большой вероятностью первое.

Dasar

где-то до сих пор активно используется однобайтная кодировка?

Barbie29

я так определял, если в слове больше 80% букв заглавные то это koi8-r, иначе win1251

serega1604

НИЧЕГО СЕБЕ!

Serab

мАКАГНЯ какая-то

Barbie29

НИЧЕГО СЕБЕ!
а ты не капси излишний раз :D
Оставить комментарий
Имя или ник:
Комментарий: