encoding finden

19/08/2010 - 19:54 von praetor | Report spam
Hallo an alle,

ich weiß, daß die Themen encodings, Umlaute etc. hier bereits rauf- und
runterdekliniert wurden und habe mich in den einschlàgigen Dokumenten
(perlunitut, Encode etc) schlau gemacht. Trotzdem bin ich an dieser Ecke
schon wieder aufgelaufen:

Ich will Daten aus einer Datenbankdatei aus der Windows-Welt holen.
Eigentlich ganz einfach:

#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use Encode;

open DBF, "<XY.DBF" or die $!;
while (my $x = <DBF>){
Encode::from_to($x, "ibm850", "utf-8");
print $x;
}

Von allen Quell-Kodierungen, die ich probiert habe (iso-*,latin*, cp*),
sieht es mit ibm850 oder ibm852 am besten aus. Umlaute und sz kommen
richtig, aber das Paragraphen-Symbol wird verschluckt.

Zwar könnte ich eine Umgehungslösung basteln, aber die Frage, die mich
umtreibt, ist: "Wie finde ich die richtige Kodierung?"

Hat jemand einen Tip?

gruß
praetor
 

Lesen sie die antworten

#1 ekkehard.horner
19/08/2010 - 21:57 | Warnen spam
praetor schrieb:
[...]
Ich will Daten aus einer Datenbankdatei aus der Windows-Welt holen.
Eigentlich ganz einfach:

#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use Encode;



Ist XY.DBF eine Datei im dBase-Format oder schon das Resultat
einer Konvertierung?

open DBF, "<XY.DBF" or die $!;
while (my $x =<DBF>){



$x =~ tr/\x15/\xF5/; # §-21 mit §-245 ersetzen; nicht wirklich
# getestet.

Encode::from_to($x, "ibm850", "utf-8");
print $x;
}

Von allen Quell-Kodierungen, die ich probiert habe (iso-*,latin*, cp*),
sieht es mit ibm850 oder ibm852 am besten aus. Umlaute und sz kommen
richtig, aber das Paragraphen-Symbol wird verschluckt.



Laut

http://en.wikipedia.org/wiki/Code_page_850

kann § als 21/15 oder 245/F5 kodiert werden; in einer alten .DBF wuerde
ich 21/15 erwarten. 'from_to($x, "ibm850", "utf-8")' veraendert 21/15
nicht (ist ja ASCII). Ob das dann richtig angezeigt wird, haengt vom
'Anzeiger' ab. Ich wuerde als erstes versuchen, dem from_to() 245/F5
unterzuschieben, was definitiv veraendert wird.

= Evidenz ==mode con

Status for device CON:
-
Lines: 500
Columns: 110
Keyboard rate: 31
Keyboard delay: 1
Code page: 850


DOS C:\Documents and Settings\eh
re

$ use Encode;

$ my $x = chr( 21 ) . chr( 245 );
§§
$ Encode::from_to($x, "ibm850", "utf-8");
3
$ $x
§┬º
$

Zwar könnte ich eine Umgehungslösung basteln, aber die Frage, die mich
umtreibt, ist: "Wie finde ich die richtige Kodierung?"



Richtig ist, was die richtigen Ergebnisse bringt - wenn der Austausch
oben funktioniert, wuerde ich das "Umgehungs" ersatzlos streichen.

Ähnliche fragen