2011-03-15 106 views
1

我需要将文件的编码格式从ANSI更改为UTF-8 ...请建议我完成此操作,我已经使用了一些方法。但它没有奏效。因此我编写了我所做的代码。Perl代码将ANSI编码格式的xml文件保存为UTF-8编码

use utf8; 
use File::Slurp; 

$File_Name="c:\\test.xml"; 
$file_con=read_file($File_Name); 

open (OUT, ">c:\\b.xml"); 
binmode(OUT, ":utf8"); 
print OUT $file_con; 
close OUT; 

回答

0

使用Text::Iconv

use Text::Iconv; 
$converter = Text::Iconv->new("cp1252", "utf-8"); 
$converted = $converter->convert($file_con); 

(假设你使用的代码页1252作为默认代码页)。

+0

Perl已经有了一个完美的cromulent编码库:[Encode](http://p3rl.org/Encode)。哦,看起来,它也有一个[iconv工作相似](http://search.cpan.org/dist/Encode/bin/piconv)! – daxim 2011-03-15 16:51:12

1

如果你只想做一个过滤器,试试这个:

perl -MEncode -pwe 's/(.*)/encode('utf8', $1)/e;' 

例如:

type c:\text.xml |perl -MEncode -pwe 's/(.*)/encode('utf8', $1)/e;' >c:\b.xml 

或修改代码:

use File::Slurp; 
use Encode; 

$File_Name="c:\\test.xml"; 
$file_con=read_file($File_Name); 

open (OUT, ">c:\\b.xml"); 
print OUT encode('utf8', $file_con); 
close OUT; 
+0

打开我的$ out_fh,'>:encoding(utf8)',$ File_name或死“无法打开$ File_name:$!\ n”; – shawnhcorey 2011-03-15 14:52:41

0

假设你有一个有效的XML文件,这将做到这一点:

use XML::LibXML qw(); 

my $doc = XML::LibXML->new()->parse_file('text.xml'); 
$doc->setEncoding('UTF-8'); 

open(my $fh, '>:bytes', 'test.utf8.xml') 
    or die("Can't create test.utf8.xml: $!\n"); 
print($fh $doc->toString()); 

这可以处理转换编码和调整<?xml?>指令。以前的答案在<?xml?>指令中留下了错误的编码。