HTML::Tidy on Windows newline проблема

При использовании HTML::Tidy в Windows для очистки вывода метода HTML::Element as_HTML я получаю неверный тип новой строки. Если я не указываю символ новой строки в конструкторе HTML::Tidy, мои строки заканчиваются CRCRLF. Если я указываю завершение "LF", я получаю "CRLF", а если я указываю "CRLF", я получаю исходное завершение CRCRLF. Я подозреваю, что это ошибка в библиотеке HTMLtidy, и ее достаточно легко обойти, если явно указать завершение Unix и вывести DOS, что практически любой приличный редактор может анализировать на любой платформе.

В ответ я решил проблему с помощью binmode ':raw:utf8' на соответствующем дескрипторе, чтобы отключить /n интерполяции:

my $output = IO::File->new($ARGV[1], 'w');
$output->binmode(':raw:utf8');
print $output HTML::Tidy->new( { wrap => 80,
                                 indent => 'auto',
                                 'wrap-attributes' => 'yes',
                               }
                             )->clean($tree->as_HTML());

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

Изменить: я обновил код, чтобы показать создание файлового дескриптора. Эту проблему можно решить, установив для параметра filehandle binmode значение raw, но тогда у меня возникают проблемы из-за Unicode в содержимом HTML. Есть ли способ решить ее, не вставляя другие проблемы?

Изменить 2: я должен отметить, что изначально я видел это как проблему HTML::Tidy, потому что печать прямой $tree->as_HTML() в дескриптор файла с любым binmode привела к правильным символам EOL. Проблема проявилась только после того, как я обернул скалярный вывод HTML:: Element в HTML-код с помощью HTML::Tidy.

1 ответ

Решение

Пытался сделать выходной файл двоичным:

binmode($output);

У меня была похожая проблема с выходными данными Template Toolkit.

Другие вопросы по тегам