如何对 Perl 字符串进行编码以便将其放入 XML 文档中?

发布于 2024-09-02 20:57:03 字数 148 浏览 2 评论 0原文

我对 perl XML 库不太熟悉(实际上,我对一般编码的理解真的很糟糕),我所做的就是获取一个可能包含“à”等字符的字符串并将其放入 XML 文件中,但是当我打开文件时,包含此类字符的行出现编码错误。

所以我只需要一种轻量级的方法来获取字符串并将其编码为 XML。

I'm not too fluent with the perl XML libraries (actually, I really suck at understanding encoding in general), all I'm doing is taking a string that possibly has characters such as "à" and putting it in an XML file, but when I open the file, I get an encoding error at the line containing such a character.

So I just need a lightweight way to take a string and encode it for XML.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

顾冷 2024-09-09 20:57:03

您的 XML 应指定 UTF-8 编码。例如:

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

UTF-8 和 Unicode 标准 上有很多有用的信息。

您的 Perl 程序还应该将其输出文件句柄设置为 UTF-8 编码,以便正确写入数据。例如,请参阅 open 的 Perl 文档。

您唯一需要的特定于 XML 的转义是 XML 保留字符。请参阅 Stackoverflow 上的在哪里可以获得 XML 文档转义字符的列表?

您可以使用 Perl 的 XML::Code 或类似的模块来转义 XML 特定的字符

Your XML should specify UTF-8 encoding. For example:

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

There's a lot of good information at UTF-8 and Unicode Standards.

Your Perl program should also be set its output filehandle to the UTF-8 encoding so it writes the data correctly. See the perl documentation for open, for instance.

The only XML-specific escaping you need is for the XML reserved characters. See Where can I get a list of the XML document escape characters? on Stackoverflow.

You can use Perl's XML::Code or a similar module to escape the XML-specific chars

缘字诀 2024-09-09 20:57:03

使用 LibXML 的示例,这是 XML 的标准大锤。不是轻量级的,但你的问题确实是一个熟悉的钉子,至少我们也没有花太多时间编写代码。

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

请参阅方法 toFile 以写入文件。

Example using LibXML, which is the standard big hammer for XML. Not lightweight, but your problem really is a familiar nail and at least we're not spending much time writing code, either.

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

See method toFile for writing into a file.

玩套路吗 2024-09-09 20:57:03

我无法让答案 2 工作。试试这个,它会生成 XML,其中显示“格式不正确(无效令牌)”:

#!/usr/bin/perl -wT

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

binmode(STDOUT, ':utf8');
my $string = 'foo ä bar';
$string = decode_entities($string);
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString();  

I couldn't get answer 2 to work. Try this, it produces XML which says "not well-formed (invalid token)":

#!/usr/bin/perl -wT

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

binmode(STDOUT, ':utf8');
my $string = 'foo ä bar';
$string = decode_entities($string);
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString();  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文