|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 17 Apr 2002 15:14:10 To : Artem Chuprina Subject : Re: LWP.Locale -------------------------------------------------------------------------------- Artem Chuprina wrote: > Здравствуй, Hовотарский В.В.. > > HВВ> Кто подскажет как справиться со следующей ситуацией (ОС - XP, > HВВ> Windows-200). Задача - прочитать информацию из опред.сайта при помощи > HВВ> LWP. Проблема в том, что прочитанная информация оказываетя в > HВВ> кодировке Кирилица-ISO, вместо Кирилица-Windows. Browser вычитывает ту же > HВВ> страницу в нужной кодировке, а скрипт в Кирилица-ISO. Как можно это > HВВ> побороть. > > Так же, как браузер - перекодировкой. Можно так же попытаться выставить Accept-Charset в заголовке (стандартный метод для HTTP/1.1, RFC 2616). $request->header('Accept-Charset' => 'windows-1251, *;q=0.5'); и попросить сервер дать содержимое в кодировке windows-1251, если возможно, или в какой он может, если в 1251 ему никак. Есть еще нестандартный способ, основанный на том, что часть pre-1.1 веб-серверов для определения чарсета анализирует User-Agent. Т.е. имеет смысл одновременно с первым способом сделать: $ua->agent('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)'); но сервер вправе вернуть контент и в другой кодировке, если он не умеет выдавать в windows-1251. Поэтому необходима проверка типа: my $defcharset = 'windows-1251'; my $ctype = $response->header('Content-Type'); my $charset = ($ctype =~ /;\s*charset=([\w-]+)/) ? $1 : $defcharset; if ($charset !~ /1251$/) { ... Замечу, что $defcharset = 'windows-1251' нарушает стандарт. Документ с неуказанной кодировкой должен трактоваться как iso8859-1, однако в реальности многие русскоязычные сервера клали на это. Равно как и бывают странные вариации написания чарсета типа 'cp1251', посему введено нестрогое сравнение. В общем, я обобщенную ситуацию вкратце описал, но надеюсь, что для одной, отдельно взятой страницы будет достаточно упрощенного кода :) Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/528410116d9d.html, оценка из 5, голосов 10
|