[perl] кодировка в XML::XPath

perl xml xpath utf8

Существует задача - из текстового файла в кодировке UTF8 заносить данные в XML файл, который тоже в UTF8. Вроде бы всё просто до безобразия (в теории), но на практике есть проблема:
для ряботы с xml используется XML::XPath

#парсим XML конфиг
my $xp = XML::XPath->new(filename => 'configuration.xml');

$val = 'текст на русском, который мы прочитали из .txt файла';
# а вот тут мы переписываем значение на новое
$xp->setNodeText(qq~/conf/param[\@name="$pname"]/description[\@lang="ru"]~, $val);
#теперь, если мы попробуем напечатать значение
print $xp->find(qq~/conf/param[\@name="$pname"]/description[\@lang="ru"]~)->get_node(1)->string_value();
#то увидим наш текст на русском языке. До сих пор все работает прекрасно

но вот мы попробуем записать весь наш измененный XML в файл
print FH $xp->find('/conf')->get_node(1)->toString;
вот тут-то мы мусор и получим.... все русские буквы корежатся...

в доках про toString вообще почти ничего не сказано... вроде он никак не должен влиять на кодировку.

Подскажите, что я делаю не так :)
Ответы:
А Вы действительно читали из текстового файла и было все Ok?
Или как в примере подставляли строку напрямую?
Скорее  всего у Вас проблемы именно с чтением и записью данных.
если вы перечитаете мой вопрос, то увидете, что проблема исключительно в выводе XML::XPath. Я без проблем могу читать писать файлы в utf8 (благо это у меня дефолтная локаль).
Как я разобрался чуточку позже, метод toString зачем-то перекодирует данные в iso8859-1, хотя нигде в документации об этом ни слова не сказано. В результе конечно я получаю абракадабру на выходе, поскольку я то жду данных в utf8. Как с этим бороться мне пока не ясно... (ну можно конечно решить проблему в лоб и ещё раз вручную перекодировать данные обратно в utf8, но этот способ по моему не самый лучший)


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.