Основная проблема заключается в том, что символы, представленные ’
, “
и ”
, не существуют в ISO-8859-1 . Вам нужно решить, что вы хотите с ними делать.
Некоторые возможности:
Используйте cp1252 , «расширенную» версию Microsoft ISO-8859-1 вместо реальной. Он включает в себя эти символы.
Перекодировать объекты за пределами диапазона ISO-8859-1 (плюс &
) перед преобразованием из utf-8 в ISO-8859-1:
my $toEncode = do { no warnings 'utf8'; "&\x{0100}-\x{10FFFF}" };
$string = HTML::Entities::encode_entities($string, $toEncode);
(бит no warnings
необходим, потому что U + 10FFFF фактически еще не назначен.)
Есть и другие возможности. Это действительно зависит от того, чего вы пытаетесь достичь.