Perl - 将PC UTF-8转换为PC ANSI

use*_*746 4 unicode perl ansi

我有一个编码PC UTF-8的文件.我想将文件转换为PC ANSI.

我试过下面的,但我总是把输出文件变成PC UTF-8.

use Encode;

$infile = $ARGV[0];
open(INFILE, $infile);

my $outfile = "temp.txt";

open(OUTFILE, ">$outfile");

while(<INFILE>) {
  my $row = $_;
  chomp $row;

  $row = Encode::encode("Windows-1252", $row);
  print OUTFILE $row."\n";

}

close INFILE;
close OUTFILE;
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 10

问题是您永远不会解码您编码的数据.

use strict;
use warnings;
use Encode qw( encode decode );

open(my $INFILE,  '<', $ARGV[0]) or die $!;
open(my $OUTFILE, '>', $ARGV[1]) or die $!;

while (my $utf8 = <$INFILE>) {
   my $code_points = decode('UTF-8', $utf8);    # <-- This was missing.
   my $cp1252 = encode('cp1252', $code_points);
   print $OUTFILE $cp1252;
}
Run Code Online (Sandbox Code Playgroud)

但是你可以更轻松地做到这一点:

use strict;
use warnings;

open(my $INFILE,  '<:encoding(UTF-8)',  $ARGV[0]) or die $!;
open(my $OUTFILE, '>:encoding(cp1252)', $ARGV[1]) or die $!;

while (<$INFILE>) {
   print $OUTFILE $_;
}
Run Code Online (Sandbox Code Playgroud)