Я очищаю веб-страницу и извлекаю из нее определенный раздел. В этот раздел включены кавычки (’
, символ 146). Я пытаюсь распечатать извлеченные данные в текстовый файл, но он дает мне ’
вместо перевернутой запятой. Я попробовал следующее:Кодирующий модуль и перевернутые запятые
$content =~ s/’/'/g;
my $invComma = chr 146; $content =~ s/$invComma/'/g;
$content =~ s/\x{0092}/'/g;
Ни один из них не работал. Я не могу decode('UTF-8', $content)
, потому что он имеет широкие символы. Когда я пытаюсь сделать encode('UTF-8', $content)
, ’
вместо этого изменяется на ’
. Я уже пробовал use utf8
, а также не имел никакого эффекта.
Я знаю, что мой просмотрщик текстовых файлов может отображать инвертированные запятые, потому что я напечатал его в тестовом файле и открыл его. Поэтому проблема заключается в моем скрипте.
Что я делаю неправильно и как его исправить?
UPDATE: Я могу сделать $content =~ s/’/'/g
заменить его простой апостроф, но я до сих пор не знаю, почему ничего не работает. Я также хотел бы исправить, что на самом деле решает проблему, а не просто решить один из симптомов.
UPDATE 2: Я был проинформирован hobbs, что персонаж на самом деле U+2019 RIGHT SINGLE QUOTATION MARK
и изменил мое регулярное выражение, чтобы использовать chr 0x2019
который теперь работает.
Однако вы извлекаете содержимое веб-страницы, это неверно интерпретирует кодировку, но вы не указали эту часть кода в своем вопросе. – hobbs
Я использую метод LWP :: Simple (_URL_). Что бы вы рекомендовали вместо этого? – Lilith
Вы уверены, что _инвертированная запятая составляет 146? Я просто копировал и вставлял его из своего OP в свой редактор, сохранял его, делал 'hexdump -C' и получил' e2 80 99'. – PerlDuck