HTML :: Tidy on Windows newline проблема - PullRequest
4 голосов
/ 14 февраля 2011

При использовании 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 Ответ

2 голосов
/ 14 февраля 2011

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

binmode($output);

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

...