Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6508[/thread]

Problem mit Umlaute bzw. nationale Sonderzeichen



<< >> 3 Einträge, 1 Seite
hehol
 2004-08-18 16:37
#49352 #49352
User since
2004-08-18
1 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte die in einem in UTF-8 kodierten String enthaltenen nationalen Sonderzeichen (ä,ç,ê usw.) in das naheliegendste ASCII-Zeichen verwandeln. Aus "Müller" soll "Muller" werden usw. Ich habe

Code: (dl )
1
2
3
use Encode qw(encode decode);

my $plain = encode("ascii", decode("utf8", $utfstring));

probiert, aber dabei werden alle nicht-ASCII Zeichen durch Fragezeichen ersetzt.

Gibt es irgendeine Möglichkeit, mit der ich mir das Erstellen einer vollständigen UTF-8 Zeichenersetzungstabelle ersparen kann?

Viele Dank für Eure Hilfe
Henning
Taulmarill
 2004-08-18 17:00
#49353 #49353
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hm, dir wird nichts anderes übrig bleiben, alls so eine liste zu erstellen oder zu besorgen.
für umlaute hab ich nen modul gefunden => Linua::DE::ASCII.
Wenn es dir allerdings nicht um "echtes" ascii sondern einfach nur im 8-bit text geht, kannst du folgendes verwenden:
Code: (dl )
1
2
use Encode qw/from_to/;
from_to( $foo, "utf8", "iso-8859-1" );
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2004-08-18 18:03
#49354 #49354
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn du kein besseres Modul findest, dann koenntest du mithilfe von charnames und ein bisschen Heuristik eine Ersatzdarstellung finden. Z.B.:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use charnames qw();

my $s = "Müller";
my $t = "";
for my $ch (split //, $s) {
my $ord = ord $ch;
if ($ord > 127) {
my $charname = charnames::viacode($ord);
if ($ord == 223) { # Ausnahme sz
$t .= "ss";
} elsif ($charname =~ /(CAPITAL|SMALL)\s+LETTER\s+(.)/) {
if ($1 eq 'CAPITAL') {
$t .= uc($2);
} else {
$t .= lc($2);
}
} else {
$t .= "?";
}
} else {
$t .= $ch;
}
}
warn $t;
<< >> 3 Einträge, 1 Seite



View all threads created 2004-08-18 16:37.