File I/O Layer und BOM (Byte Order Mark)

06/02/2010 - 22:28 von Klaus | Report spam
Hallo,

in Perl kann man ja dank I/O-Layer einfach die Unicode-Kodierung einer Datei
àndern, zB:

open (my $infh, '<:encoding(utf-8)', $infile) or die $!;
open (my $outfh, '>:encoding(iso-8859-15)', $outfile) or die $!;
print $outfh $_ while <$infh>;

Klappt auch gut, aber wenn mein Infile eine BOM-Kennung hat, meckert Perl,
weil es den BOM in 8859-15 umwandeln möchte (was ja nicht geht).

Meldung: x{feff}" does not map to iso-8859-15

Müsste nicht eigentlich open den BOM erkennen und entsprechend gesondert
behandeln und nicht versuchen, den nach 8859-15 umzuwandeln?
Muss ich selber auf den BOM prüfen und ihn entfernen, oder gibt es andere
Möglichkeiten?


Grüße
Klaus
 

Lesen sie die antworten

#1 Peter J. Holzer
06/02/2010 - 22:44 | Warnen spam
On 2010-02-06 21:28, Klaus wrote:
in Perl kann man ja dank I/O-Layer einfach die Unicode-Kodierung einer Datei
àndern, zB:

open (my $infh, '<:encoding(utf-8)', $infile) or die $!;
open (my $outfh, '>:encoding(iso-8859-15)', $outfile) or die $!;
print $outfh $_ while <$infh>;

Klappt auch gut, aber wenn mein Infile eine BOM-Kennung hat, meckert Perl,
weil es den BOM in 8859-15 umwandeln möchte (was ja nicht geht).

Meldung: x{feff}" does not map to iso-8859-15

Müsste nicht eigentlich open den BOM erkennen und entsprechend gesondert
behandeln und nicht versuchen, den nach 8859-15 umzuwandeln?



In UTF-8 gibt es kein BOM. \x{feff} hat hier die normale Bedeutung "ZERO
WIDTH NO-BREAK SPACE".

Muss ich selber auf den BOM prüfen und ihn entfernen, oder gibt es andere
Möglichkeiten?



Du musst selber entscheiden, was Du damit machen willst (entfernen,
durch ein anderes Zeichen ersetzen, ...) genauso wie bei jedem anderen
Zeichen, das nicht in iso-8859-15 enthalten ist.

hp

Ähnliche fragen