Forums Neueste Beiträge
 

Probleme beim umkodieren mit Locale::Recode

26/03/2010 - 22:25 von Ekki Plicht (DF4OR) | Report spam
Tag.

Ich habe die Aufgabe ein Textfile, das von einer dBase Applikation (DOS)
generiert wurde, in UTF-8 zu wandeln (u.a.). Der Text liegt im charset cp850
vor.

Zum Umkodieren verwende ich Locale::Recode.

Leider schlàgt das Umkodieren fehl, zumindest bei bestimmten Umlauten. àöü
werden korrekt konvertiert, ÖÄÜß hingegen nicht. Aus Ö wird z.B. 0xC3 0x96
(U+C396), aus ß wird 0xC3 0x9F (U+C39F), also beides Zeichen die in UTF-8
alles darstellen, nur kein Ö oder ß. Ähnlich verhàlt es sich bei anderen
'Sonderzeichen' wie c-cedille, frz. Accents, d.h. die werden auch nicht
korrekt konvertiert.

Bereits probiert:
- Ich habe mit hexedit die Eingabe überprüft, die Umlaute usw. sind korrekt
nach cp850 kodiert, am Input scheint es also nicht zu liegen.
- open mit "<:raw" discipline, keine Änderung

Leider kann ich keine Textsamples zur Verfügung stellen, da es sich hier um
Kundendaten (Adressen) handelt.

Perl ist Version 5.8.8 auf einem etwas abgehangenen Debian System, das
derzeit leider keinen kurzfristigen Upgrade erfahren kann.

Das vorhandene iconv macht alles richtig, ich wollte allerdings aus
bestimmten Gründen auf den Shellaufruf verzichten.

Any hints?

Danke,
Ekki
 

Lesen sie die antworten

#1 Peter J. Holzer
27/03/2010 - 19:54 | Warnen spam
On 2010-03-26 21:25, Ekki Plicht (DF4OR) wrote:
Ich habe die Aufgabe ein Textfile, das von einer dBase Applikation (DOS)
generiert wurde, in UTF-8 zu wandeln (u.a.). Der Text liegt im charset cp850
vor.

Zum Umkodieren verwende ich Locale::Recode.

Leider schlàgt das Umkodieren fehl, zumindest bei bestimmten Umlauten. àöü
werden korrekt konvertiert, ÖÄÜß hingegen nicht. Aus Ö wird z.B. 0xC3 0x96
(U+C396), aus ß wird 0xC3 0x9F (U+C39F), also beides Zeichen die in UTF-8
alles darstellen, nur kein Ö oder ß.



Wie kommst Du auf die Idee, dass 0xC3 0x96 die UTF-8-Kodierung von
U+C396 wàre? 0xC3 0x96 ist U+00D6, also Ö, 0xC3 0x9F ist U+00DF, also ß.
Stimmt beides.

U+C396 und U+C39F wàren 0xEC 0x8E 0x96 bzw, 0xEC 0x8E 0x9F in UTF-8.


[...]

Das vorhandene iconv macht alles richtig, ich wollte allerdings aus
bestimmten Gründen auf den Shellaufruf verzichten.



iconv produziert ganz sicher das gleiche Ergebnis.

hp

Ähnliche fragen