Perl代码将ANSI编码格式的xml文件保存为UTF-8编码

时间:2011-03-15 13:36:45

标签: perl

我需要将文件的编码格式从ANSI更改为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;

3 个答案:

答案 0 :(得分:1)

假设您有一个有效的XML文件,可以这样做:

use XML::LibXML qw( );

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

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

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

答案 1 :(得分:0)

如果您只想制作过滤器,请尝试以下操作:

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;

答案 2 :(得分:-1)

使用Text::Iconv

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

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