我對perl XML庫不太流利(實際上,我真的很瞭解編碼),我所做的只是將一個可能包含字符(如「à」)並將其放入XML中的字符串文件,但是當我打開文件時,在包含這樣的字符的行處出現編碼錯誤。我如何編碼一個Perl字符串,以便將其放入XML文檔中?
所以我只需要一個輕量級的方式來接受一個字符串並將其編碼爲XML。
我對perl XML庫不太流利(實際上,我真的很瞭解編碼),我所做的只是將一個可能包含字符(如「à」)並將其放入XML中的字符串文件,但是當我打開文件時,在包含這樣的字符的行處出現編碼錯誤。我如何編碼一個Perl字符串,以便將其放入XML文檔中?
所以我只需要一個輕量級的方式來接受一個字符串並將其編碼爲XML。
您的XML應指定UTF-8編碼。例如:
<?xml version="1.0" encoding="UTF-8" ?>
有很多很好的信息在UTF-8 and Unicode Standards。
您的Perl程序還應該將其輸出文件句柄設置爲UTF-8編碼,以便正確寫入數據。例如,請參閱open的perl文檔。
唯一需要的XML特定轉義是用於XML保留字符。請參閱Stackoverflow上的Where can I get a list of the XML document escape characters?。
例。不是輕量級的,但你的問題確實是一個熟悉的指甲,至少我們也沒有花太多時間編寫代碼。
use XML::LibXML();
XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($text)->toString; # returns properly encoded fragment
查看用於寫入文件的方法toFile
。
我無法得到答案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();
答案可能是好了很多:①草率的超文本的副本(使用「這裏」,貧血鏈接文本)。 ②可能引起混淆的信息:'使用utf8;'實際上只是告訴Perl程序員已經用UTF-8編碼了Perl源代碼。這與用問題中提出的編碼來編寫文件是不同的概念。 ③不準確的術語:*分隔符*(XML§4.6)需要轉義。 ④缺乏模塊的固定鏈接。 – daxim 2010-05-24 08:37:15
我修復了所有這些。我想你錯過了最大的問題:你不應該手工編寫XML,所以你不應該想到這一點。使用一個完全爲你做的模塊。 :)哦,並得到更多的代表,你也可以修復的東西:) – 2010-05-24 16:30:02