Deutsch nach ASCII konvertieren
- From: Christoph 'Mehdorn' Weber <das-mehdorn@xxxxxxxxxxxxx>
- Date: Tue, 31 Jul 2007 02:28:03 +0200
Hallo!
Ich bin auf der Suche nach einem Perl-Modul bzw. vielmehr einer
Funktion, die auch durch ein Modul bereitgestellt werden darf, die
quasi wie 'encode("ascii", $string)', aber dabei deutsche Umlaute,
scharfes S etc. nach den üblichen Regeln ersetzt zu "ae", "oe", ...
"ss" etc.
Grund: Das Ziel, wo ich die Daten darstellen will, kann nur
7-Bit-Zeichen sicher transportieren bzw. verarbeiten. Und die
Ausgabe soll dabei menschenlesbar sein.
Zur Konvertierung habe ich drei Dinge gefunden:
1. Encode mit anonymer Funktion (ala perldoc Encode)
my %ascii_replace = (
196 => "Ae",
...
223 => "ss",
);
$ascii = encode(
"ascii", $string, sub {
my $c = shift;
return $ascii_replace{$c} if (defined($ascii_replace{$c}));
return "?";
}
);
Diese Variante hat den Haken, daß %ascii_replace recht umfangreich
werden könnte. Konkret will ich (deutsche) Ortsnamen umwandeln, aber
gerade in Grenznähe kommen da schon mal Akzente etc. mit hinein, die
auch berücksichtigt werden wollen.
2. Lingua::DE::ASCII
Da gibt es zwei Funktionen, to_ascii und to_latin1. Und in der
Dokumentation steht, daß sich die beiden Module quasi aufheben,
also das to_ascii offenbar einen Latin-1-kodierten String will.
Allerdings habe ich keine Lust, jedesmal meine Perl-Strings erst
nach ISO-8859-1 umzukodieren, um sie danach zu ASCII zu wandeln.
Ganz abgesehen davon: Das Modul ist wegen der Funktion to_latin1
recht komplex und fett; allerdings brauche ich die Gegenrichtung
nicht. Somit verbrate ich unnötig Platz und Ladezeit.
Allerdings muß ich wohl keinen Hash erstellen/pflegen.
3. Regex-Wirrwarr
Gefunden habe ich weiterhin eine kleine Sub, die die Ersetzung
mit einer Regex erledigt und danach gegebenenfalls verbleibende
Nicht-7-Bit-Zeichen wahlweise auch per Regex durch Fragezeichen
ersetzt oder mit tr/// wegwirft.
Ähnlich wie bei Variante 1 wird hier die Menge der Ersetzungs-Regexen
recht hoch, wenn man mehr als nur die Umlaute und das scharfe S ersetzen
will.
Alle drei Varianten haben also entscheidende Nachteile (soweit
ich das überblicke). Nun stellt sich mir die Fragen:
- Habe ich etwas übersehen?
- Gibt es das auch in "schön"?
- Wo finde ich das gegebenenfalls?
- Gibt es vielleicht ein tolles Encoding ähnlich wie ascii-ctrl,
das eine passende Ersetzung liefert?
(- Oder ist mein Problem doch so selten?)
Ach ja, fürs Protokoll: Meine Perl-Version ist 5.8.8, und
encode('MIME-Q', $string) will ich eher nicht. Auch, wenn es
vielleicht nicht die schlechteste Wahl ist.
Christoph
--
In Berlin gibt es die Pfannkuchen sowohl mit Puderzucker als auch mit
Zuckerguss. Beide Arten bekomme ich nur mit Widerwillen herunter. --
"Ein Pfannkuchen mit Puderzucker und Widerwillen, bitte..."
(Dieter Bruegmann, Volker Gringmuth)
.
- Follow-Ups:
- Re: Deutsch nach ASCII konvertieren
- From: Hermann Martinelli
- Re: Deutsch nach ASCII konvertieren
- From: Bjoern Hoehrmann
- Re: Deutsch nach ASCII konvertieren
- Prev by Date: Re: Perlscript will im cronjob nicht richtig.
- Next by Date: Re: Deutsch nach ASCII konvertieren
- Previous by thread: Zwei unterschiedliche Server / 2 Ergebnisse
- Next by thread: Re: Deutsch nach ASCII konvertieren
- Index(es):
Relevant Pages
|