Ich benutze osql, um mehrere SQL-Skripte gegen eine Datenbank laufen zu lassen, und dann muss ich in der Ergebnisdatei nachsehen, ob irgendwelche Fehler aufgetreten sind. Das Problem ist, dass Perl die Tatsache nicht zu mögen scheint, dass die Ergebnisdateien Unicode sind.Wie kann ich eine Unicode-Datei mit Perl öffnen?
schrieb ich ein kleines Testskript zu testen und die Ausgabe alle trällerte kommt heraus:
$file = shift;
open OUTPUT, $file or die "Can't open $file: $!\n";
while (<OUTPUT>) {
print $_;
if (/Invalid|invalid|Cannot|cannot/) {
push(@invalids, $file);
print "invalid file - $inputfile - schedule for retry\n";
last;
}
}
Irgendwelche Ideen? Ich habe versucht Decodierung mit decode_utf8
, aber es macht keinen Unterschied. Ich habe auch versucht, die Kodierung beim Öffnen der Datei einzustellen.
Ich denke, das Problem könnte sein, dass osql die Ergebnisdatei im UTF-16-Format legt, aber ich bin mir nicht sicher. Wenn ich die Datei im Textpad öffne, sagt sie mir einfach 'Unicode'.
Edit: Mit Perl v5.8.8 Edit: Hex-Dump:
file name: Admin_CI.User.sql.results
mime type:
0000-0010: ff fe 31 00-3e 00 20 00-32 00 3e 00-20 00 4d 00 ..1.>... 2.>...M.
0000-0020: 73 00 67 00-20 00 31 00-35 00 30 00-30 00 37 00 s.g...1. 5.0.0.7.
0000-0030: 2c 00 20 00-4c 00 65 00-76 00 65 00-6c 00 20 00 ,...L.e. v.e.l...
0000-0032: 31 00 1.
Wie sieht die Ausgabe aus? Können Sie einen hex + ascii-Dump am Anfang der Datei angeben? –
Die Ausgabe sieht ungefähr so aus: ■ 1> 2> M s g 1 5 1 5 1, L e v e l 1 6, S t a t e 1 –
Was würde ich verwenden, um einen hex + ascii-Dump vom Anfang der Datei zu liefern? –