Ich verwende osql, um mehrere SQL-Skripte für eine Datenbank auszuführen, und dann muss ich in der Ergebnisdatei nachsehen, ob Fehler aufgetreten sind. Das Problem ist, dass Perl die Tatsache nicht zu mögen scheint, dass die Ergebnisdateien Unicode sind.
Ich habe ein kleines Testskript geschrieben, um es zu testen und die Ausgabe kommt durcheinander:
%Vor% Irgendwelche Ideen? Ich habe versucht Decodierung mit decode_utf8
, aber es macht keinen Unterschied. Ich habe auch versucht, die Kodierung beim Öffnen der Datei zu setzen.
Ich denke, das Problem könnte sein, dass osql die Ergebnisdatei im UTF-16-Format ablegt, aber ich bin mir nicht sicher. Wenn ich die Datei im Textpad öffne, sagt sie mir einfach 'Unicode'.
Bearbeiten: Verwenden von Perl v5.8.8 Bearbeiten: Hex-Dump:
%Vor%Die Datei befindet sich vermutlich in UCS2-LE (oder UTF-16 Format).
%Vor%Wenn Sie eine solche Datei zum Lesen öffnen, müssen Sie die Codierung angeben:
%Vor% Beachten Sie, dass das fffe
am Anfang die Stückliste ist.
Die Antwort finden Sie in der Dokumentation zu open , die Sie auch auf perlunintro . :)
%Vor% Sie können eine Liste der Namen der Kodierungen erhalten, die Ihr perl
unterstützt:
Danach müssen Sie herausfinden, wie die Datei codiert ist. Dies ist die gleiche Art und Weise, wie Sie eine Datei mit einer anderen Kodierung als der Voreinstellung öffnen würden, unabhängig davon, ob diese von Unicode definiert ist oder nicht.
Wir haben ein Kapitel in Effektive Perl-Programmierung , das durch die Details geht.
Öffnen Sie die Datei mit einer angegebenen E / A-Schicht, z. :
%Vor%Weitere Informationen hierzu finden Sie unter perldoc open .