parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

кодировка file::exec

Александр 10.04.2010 02:18 / 10.04.2010 02:20

в документации сказано:
Формат - формат представления получаемых от скрипта данных. Может быть text (по умолчанию) или binary. При использовании формата binary не будут производиться перекодирования полученных данных в кодировку $request:charset и их обрезания по первому нулевому символу.
означает ли это, что если я укажу text, то ответ перекодируется в $request:charset?

проблема в следующем:
в $request:charset и $response:charset у меня UTF-8.

пытаюсь через curl загрузить сайт в кодировке windows-1251.
$args[^table::create{argument}]
^args.append{http://www.parser.ru}
^args.append{-i}
$file[^file::exec[text;/path/to/curl;;$args]]
в $file.text находятся данные в WINDOWS-1251.

если же указать явно:
$file[^file::exec[text;/path/to/curl;$.charset[windows-1251];$args]]
то $file.text в UTF-8

Пока работает только способ типа:
$file[^file::exec[text;/path/to/curl;;$args]]
^file.text.save[/tmp.txt]
$file[^file::load[text;http://$env:SERVER_NAME/tmp.txt]]
тогда в $file.text попадают данные в UTF-8, но использовать такой способ не очень бы хотелось.

Передавая параметр "--i" в curl вместе с текстом я получаю ответ сервера:
HTTP/1.1 200 OK
Date: Fri, 09 Apr 2010 22:12:28 GMT
Server: Apache/1.3.37 (Unix)
Content-Length: 21188
Connection: close
Content-Type: text/html; charset=WINDOWS-1251
который могу проматчить и получить кодировку сервера, НО, если в тексте страницы присутствуют русские буквы в кодировке, отличной от UTF-8 получается ошибка UTF-8 validation failed during pcre_exec (-10).

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

Есть еще какие-либо решения как можно организовать перекодировку?