2011-03-15 135 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?>指令中留下了錯誤的編碼。