ich schon wissen, wie die Nicht-UTF-8-kodierten Inhalt einer Datei Zeile für Zeile auf UTF-8 zu konvertieren, so etwas wie den folgenden Code:Wie kann ich eine Eingabedatei in UTF-8-Codierung in Perl konvertieren?
# outfile.txt is in GB-2312 encode
open my $filter,"<",'c:/outfile.txt';
while(<$filter>){
#convert each line of outfile.txt to UTF-8 encoding
$_ = Encode::decode("gb2312", $_);
...}
Aber ich denke, Perl das ganze direkt kodieren Eingabedatei in UTF-8-Format, so habe ich versucht, so etwas wie
#outfile.txt is in GB-2312 encode
open my $filter,"<:utf8",'c:/outfile.txt';
(Perl sagt so etwas wie "UTF-8 "\ xD4" Karte nicht auf Unicode")
und
open my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
(Perl sagt „Readline-() auf ungeöffnete Dateihandle!)
Sie arbeiten nicht. Aber gibt es eine Möglichkeit, die Eingabedatei direkt in UTF-8 zu konvertieren?
Update:
Sieht aus wie die Dinge nicht so einfach sind, wie ich dachte. Ich kann nun die Eingabedatei über Umwege in UTF-8-Code umwandeln. Ich öffne zuerst die Eingabedatei und dann kodiere den Inhalt davon zu UTF-8 und dann Ausgabe in eine neue Datei und öffne dann die neue Datei für die weitere Verarbeitung. Dies ist der Code:
open my $filter,'<:encoding(gb2312)','c:/outfile.txt';
open my $filter_new, '+>:utf8', 'c:/outfile_new.txt';
print $filter_new $_ while <$filter>;
while (<$filter_new>){
...
}
Aber das ist zu viel Arbeit und es ist sogar noch problematischer als einfach den Inhalt von $ filter zeilen kodieren.
Wenn Sie in einer Frage eine Warnmeldung angeben, fügen Sie die Warnmeldung in die Frage ein. :) –
@brian, danke für den Vorschlag. – Mike
Es ist am besten, die genaue Warnmeldung zu verwenden :) Also, mit dieser Warnung müssen Sie das Ergebnis Ihrer Open überprüfen (was Sie immer tun sollten). –