Как я могу кодировать строку Perl, чтобы поместить ее в документ XML? - PullRequest
1 голос
/ 24 мая 2010

Я не слишком хорошо разбираюсь в библиотеках Perl XML (на самом деле, я действительно не очень разбираюсь в кодировании), все, что я делаю, - это беру строку, которая, возможно, содержит символы, такие как "à", и помещаю ее в XML-файл, но когда я открываю файл, я получаю ошибку кодирования в строке, содержащей такой символ.

Так что мне просто нужен легкий способ взять строку и кодировать ее для XML.

Ответы [ 3 ]

4 голосов
/ 25 мая 2010

Пример использования LibXML , который является стандартным большим молотком для XML. Не легкий, но ваша проблема действительно знакома, и, по крайней мере, мы не тратим много времени на написание кода.

use XML::LibXML ();
XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($text)->toString; # returns properly encoded fragment

См. Способ toFile для записи в файл.

4 голосов
/ 24 мая 2010

Ваш XML должен указывать кодировку UTF-8. Например:

<?xml version="1.0" encoding="UTF-8" ?>

В UTF-8 и стандартах Unicode .

есть много полезной информации.

Ваша Perl-программа должна также установить свой дескриптор выходного файла в кодировку UTF-8, чтобы она правильно записывала данные. См., Например, документацию по perl для open .

Единственное экранирование, специфичное для XML, необходимо для зарезервированных символов XML. См. Где я могу получить список управляющих символов XML-документа? в Stackoverflow.

Вы можете использовать Perl XML :: Code или аналогичный модуль для экранирования специфичных для XML символов

1 голос
/ 02 августа 2012

Я не мог получить ответ 2 на работу. Попробуйте это, он производит XML, который говорит "не правильно сформирован (неверный токен)":

#!/usr/bin/perl -wT

use XML::LibXML;
use HTML::Entities;

binmode(STDOUT, ':utf8');
my $string = 'foo &auml; bar';
$string = decode_entities($string);
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString();  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...