/ / Wie konvertiert man eine Unicode-Datei in eine ASCII-Datei in einem Perl-Skript auf Windows-Computern - Windows, Perl, Unicode, ASCII

Wie konvertiert man Unicode-Datei in ASCII-Datei in Perl-Skript auf Windows-Maschine - Windows, Perl, Unicode, ASCII

Ich habe eine Datei im Unicode-Format auf einem Windows-Computer. Gibt es eine Möglichkeit, es auf einem Windows-Computer mithilfe von Perl-Skript in das ASCII-Format zu konvertieren?

Es ist UTF-16-Stückliste.

Antworten:

10 für die Antwort № 1

Wenn Sie Unicode in ASCII konvertieren möchten, müssen Sie wissen, dass einige Zeichen nicht konvertiert werden können, da sie nur in ASCII existieren. Wenn Sie damit leben können, können Sie folgendes versuchen:

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

use open IN => ":encoding(UTF-16)";
use open OUT => ":encoding(ascii)";

my $buffer;

open(my $ifh, "<", "utf16bom.txt");
read($ifh, $buffer, -s $ifh);
close($ifh);

open(my $ofh, ">", "ascii.txt");
print($ofh $buffer);
close($ofh);

Wenn Sie kein Autodie haben, entfernen Sie einfach diese Zeile - Sie sollten Ihre Open / Close-Anweisungen dann mit a ändern

open(...) or die "error: $!n";

Wenn Sie Zeichen haben, die nicht konvertiert werden können, werden Warnungen auf der Konsole angezeigt, und Ihre Ausgabedatei enthält beispielsweise einen Text

x{00e4}x{00f6}x{00fc}x{00df}

drin. BTW: Wenn Sie keine Mutter haben, aber wissen, dass es sich um Big Endian (Little Endian) handelt, können Sie die Kodierungszeile in ändern

use open IN => ":encoding(UTF-16BE)";

oder

use open IN => ":encoding(UTF-16LE)";

Ich hoffe es funktioniert auch unter Windows. Ich kann es jetzt nicht versuchen.


3 für die Antwort № 2

Sehen Sie sich die Codierungsoption für Perl an öffnen Befehl. Sie können die Codierung angeben, wenn Sie eine Datei zum Lesen oder Schreiben öffnen:

Es wäre so etwas würde funktionieren:

#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say switch);
use Data::Dumper;

use autodie;

open (my $utf16_fh, "<:encoding(UTF-16BE)", "test.utf16.txt");
open (my $ascii_fh, ">:encoding(ASCII)", ".gvimrc");

while (my $line = <$utf16_fh>) {
print $ascii_fh $line;
}

close $utf16_fh;
close $ascii_fh;