2011-05-27 80 views
0

如何使用Perl將字符ALT-0146寫入XML文件?

這是性格,我無法找到一種方法來檢測,更換或正確地寫入到一個XML文件。起初我使用字符串連接,然後我wisened高達XML ::作家,但它仍然不會工作,XML仍然是以後打破。(需要它UTF-8)

這是一個測試我寫道,仍然打破:

my $output = new IO::File(">$foundFilePath"); 
    my $writer = new XML::Writer(OUTPUT => $output); 
    $writer->xmlDecl("UTF-8"); 
    $writer->startTag("xml"); 
    $writer->startTag("test"); 
    $writer->characters("’"); 
    $writer->endTag("test"); 
    $writer->endTag("xml"); 
    $writer->end(); 
    $output->close(); 

更具體地講,我想從這個頁面中的數據:http://investing.businessweek.com/businessweek/research/stocks/private/snapshot.asp?privcapId=4439466

和威廉·奧基夫先生是搞亂一切。

回答

3

你需要做兩件事。如果你想寫UTF-8到一個文件,你需要這樣說:

my $output = IO::File->new($foundFilePath, ">:utf8"); 

如果你想在你的源代碼中使用的文字UTF-8字符串,你需要說

use utf8; 

在您的程序開始。否則,Perl會假定您的源代碼是Latin-1。

這裏的一個完整的示例腳本:

use utf8; 
use strict; 
use warnings; 
use IO::File; 
use XML::Writer; 

my $foundFilePath = 'test.xml'; 
my $output = IO::File->new($foundFilePath, ">:utf8"); 
my $writer = XML::Writer->new(OUTPUT => $output); 
$writer->xmlDecl("UTF-8"); 
$writer->startTag("xml"); 
$writer->startTag("test"); 
$writer->characters("’"); 
$writer->endTag("test"); 
$writer->endTag("xml"); 
$writer->end(); 
$output->close(); 
+2

或者,'$寫入器的>字符(CHR(0x2019));'和'$寫入器的>字符( 「\ X {2019}」);'不太可能受到編輯的干擾。 – ikegami 2011-05-27 06:51:40

+0

這有助於創建角色,但我的主要問題是首先檢測到它,我怎麼才能用正則表達式來捕捉角色? – 2011-05-27 18:09:21

+0

你想使用unicode塊:http://www.regular-expressions.info/unicode.html – Oesor 2011-05-27 18:13:21