Существует задача - из текстового файла в кодировке 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 вообще почти ничего не сказано... вроде он никак не должен влиять на кодировку.
Подскажите, что я делаю не так :)
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.