Unicode und Zeilenwechsel in Windows
Stefan Bach
- perl
0 Johannes
Hallo,
ich habe ein kleines Problem, wenn ich Perl auf einem Windows XP System auf Unicodedateien loslassen möchte. Die Fragliche Datei ist ein Template für den Windows Media Encoder, dieser scheint wohl unbeding eine UTF-16LE Datei zu benötigen. Ich will mein eigenes Template einlesen, ein paar Werte drin verändern und das ganze dann wieder in eine Datei schreiben, welche ich an den Encoder verfüttere.
Das Problem, welches ich dabei habe kann ich aber auch an einem kürzeren Beispiel schildern. Nehmen wir folgende Eingabedatei:
| FF FE 65 00 69 00 6E 00 73 00 0D 00 0A 00 7A 00 || ÿþe.i.n.s.....z. |
| 77 00 65 00 69 00 || w.e.i. |
Wenn ich nun folgendes Programm laufen lasse:
| open IN, "<:encoding(UTF-16LE)", "$in";
| @file = <IN>;
| close IN;
|
| open OUT, ">:encoding(UTF-16LE)", "$out";
| print OUT @file;
| close OUT;
dann steht in der Ausgabedatei hinterher folgendes:
| FF FE 65 00 69 00 6E 00 73 00 0D 00 0D 0A 00 7A || ÿþe.i.n.s......z |
| 00 77 00 65 00 69 00 || .w.e.i. |
Der Zeilenumbruch, welcher eigentlich ein "cr 0 lf 0" sein sollte wurde bei der Ausgabe zu einem "cr 0 cr lf 0", somit ist also die gesamte Datei nicht mehr wirklich zu gebrauchen.
Mein Perl ist v5.8.4 built for MSWin32-x86-multi-thread (Binary build 810 provided by ActiveState Corp).
Wäre schön, wenn jemand weiß, wie man diesem Problem beikommen kann.
Viele Grüße,
Stefan
Sind Dir die Unterschiede zwischen Unix und Windows bzgl.
Textdateien bewusst? Die Kombination CR,LF in Unix wird in Windows zu einem LF. Beim Einlesen von Unix-Dateien auf Windows sollte deswegen mit dem Schlüsselwort "binmode" gearbeitet werden.
Vielleicht ist Dir das auch alles bekannt und ich verschwende
Deine Zeit. Hoffe vielleicht ein wenig geholfen zu haben.
Gruß
Johannes
Hallo,
ich habe ein kleines Problem, wenn ich Perl auf einem Windows XP System auf Unicodedateien loslassen möchte. Die Fragliche Datei ist ein Template für den Windows Media Encoder, dieser scheint wohl unbeding eine UTF-16LE Datei zu benötigen. Ich will mein eigenes Template einlesen, ein paar Werte drin verändern und das ganze dann wieder in eine Datei schreiben, welche ich an den Encoder verfüttere.
Das Problem, welches ich dabei habe kann ich aber auch an einem kürzeren Beispiel schildern. Nehmen wir folgende Eingabedatei:
| FF FE 65 00 69 00 6E 00 73 00 0D 00 0A 00 7A 00 || ÿþe.i.n.s.....z. |
| 77 00 65 00 69 00 || w.e.i. |Wenn ich nun folgendes Programm laufen lasse:
| open IN, "<:encoding(UTF-16LE)", "$in";
| @file = <IN>;
| close IN;
|
| open OUT, ">:encoding(UTF-16LE)", "$out";
| print OUT @file;
| close OUT;dann steht in der Ausgabedatei hinterher folgendes:
| FF FE 65 00 69 00 6E 00 73 00 0D 00 0D 0A 00 7A || ÿþe.i.n.s......z |
| 00 77 00 65 00 69 00 || .w.e.i. |Der Zeilenumbruch, welcher eigentlich ein "cr 0 lf 0" sein sollte wurde bei der Ausgabe zu einem "cr 0 cr lf 0", somit ist also die gesamte Datei nicht mehr wirklich zu gebrauchen.
Mein Perl ist v5.8.4 built for MSWin32-x86-multi-thread (Binary build 810 provided by ActiveState Corp).
Wäre schön, wenn jemand weiß, wie man diesem Problem beikommen kann.
Viele Grüße,
Stefan