2011-05-27 81 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