Französische Zeichen umwandeln (é,â,...)
Phillipp
- perl
Hallo,
wie kann ich französische Buchstaben mit Accents in jene ohne Accents umwandeln? Alle Versuche mit =~s und =~tr haben nicht funktioniert...
$str =~ s/é/e/;
$str =~ tr/éèêëçâîô/eeeecaio/;
Muss ich vielleicht das Zeichen im Regex anders codieren?
Grüße,
Philipp
Hi,
Hallo,
wie kann ich französische Buchstaben mit Accents in jene ohne Accents umwandeln? Alle Versuche mit =~s und =~tr haben nicht funktioniert...
$str =~ s/é/e/;
$str =~ tr/éèêëçâîô/eeeecaio/;Muss ich vielleicht das Zeichen im Regex anders codieren?
Ich habe es nicht getestet, aber es müsste gehen, wenn du den ASCII-Code der Zeichen im RegExp angibst.
Das geht mit
\xnn bei Zeichen mit dem Hex-Code nn (ASCII-Text)
\x{nnnn} Zeichen mit dem Hex-Code nnnn (bei Unicode-Zeichen)
(Quelle)
Laut dieser Tabelle müsstest du beispielsweise für "á" beispielsweise "\xE1" schreiben können.
mfG,
steckl
Hi,
Das geht mit
\xnn bei Zeichen mit dem Hex-Code nn (ASCII-Text)
\x{nnnn} Zeichen mit dem Hex-Code nnnn (bei Unicode-Zeichen)Laut dieser Tabelle müsstest du beispielsweise für "á" beispielsweise "\xE1" schreiben können.
Wenn ich
$str = "Opéra"; habe und
$str =~ s/\xE9/e/; darauf anwende, sollte Opéra eigentlich zu Opera werden, bleibt bei mir aber Opéra...
Wenn ich
$str = "Opéra"; habe und
$str =~ s/\xE9/e/; darauf anwende, sollte Opéra eigentlich zu Opera werden, bleibt bei mir aber Opéra...
Dann beherzige bitte die Tipps für Fragende, denn mit den mageren Infos, die Du preisgibst, können wir Dir nicht helfen.
Siechfred
Hi
$str = "Opéra"; habe und
$str =~ s/\xE9/e/; darauf anwende, sollte Opéra eigentlich zu Opera werden, bleibt bei mir aber Opéra...
ich weiß nicht was du für ein Zeichensatz hast aber bei mir funtioniert es!!!
$str = "Opéra";
$str =~ s/\xE9/e/;
print $str;
vielleicht solltest du mal mit
print ord("é") dir den Dezimalcode ausgeben lassen.
Bye
KurtZ
PS: @Siechfred: zum Thema Perl5 Module weiternutzen http://www.heise.de/ix/artikel/2007/08/127/
Hi,
$str = "Opéra";
$str =~ s/\xE9/e/;
print $str;
Ich versteh die Welt nicht mehr...
Das o. g. Beispiel funktioniert so bei mir auch.
Aber im folgenden Beispiel funktioniert es nicht mehr.
$str=<stdin>;
$str =~ s/\xE9/e/;
print "$str";
Scheint ja nicht das gleiche zu sein... Weiß jemand genaueres?
Aber im folgenden Beispiel funktioniert es nicht mehr.
$str=<stdin>;
Du bist also in der Konsole, dort werden die Zeichen anders kodiert.
my $str='Opéra';#<stdin>;
print "Vorher: $str\n";
$str =~ s/é/e/;
print "Nacher: $str";
Struppi.
Hi,
Du bist also in der Konsole, dort werden die Zeichen anders kodiert.
Gibt es denn eine Möglichkeit, mit Accents eingegebene e's (a's, etc.) in normale e's (a's,...) umzuwandeln?
Grüße,
Hi,
Du bist also in der Konsole, dort werden die Zeichen anders kodiert.
Gibt es denn eine Möglichkeit, mit Accents eingegebene e's (a's, etc.) in normale e's (a's,...) umzuwandeln?
Natürlich, die wurde dir doch bereits gezeigt.
Die Frage die sich bei dir stellt ist der Zeichensatz bzw. <a href="http://de.wikipedia.org/wiki/Codepage">Codepage</a> du verwendest. Wenn du den Perl Code in einem Windows editor schreibst benutzt du i.d.R. 1252 in der Konsole bzw. MS DOS Fenster hast du aber meistens 437
Was du jetzt machen musst, hängt davon ab wo du die Ausgabe nun haben willst.
Struppi.
Okay, dann hab ich das noch nicht ganz verstanden...
Ich benutze als Editor UltraEdit und das DOS Command Window.
Mein Script sieht unter Berücksichtigung der vorherigen Postings bisher so aus:
#/usr/bin/perl -w
print"Eingabe: ";
$str=<stdin>;
print "Vorher: $str\n";
$str =~ s/\xE9/e/;
print "Nachher: $str\n";
<stdin>
und die Ausgabe lautet
Eingabe: <Opéra>
Vorher: Opéra
Nachher: Opéra
Die Codes sehe ich also auf dieser Seite
http://www.torsten-horn.de/techdocs/ascii.htm
unter ANSI und die betreffenen Zeichen sind Exx und Fxx.
Also s/\xExx/wasauchimmer/; Soweit richtig?
Im Script klappt es leider immer noch nicht. Was muss ich anders machen?
Grüße,
Ich benutze als Editor UltraEdit und das DOS Command Window.
Okay, dann mach mal folgendes:
print "Eingabe: ";
my $str = <STDIN>;
print "Codiert: ", sprintf("%02X", ord $str);
Das ergibt bei mir bei Eingabe von 'é' den Wert 82, für 'è' den Wert 8A. Das Ganze angewendet:
$str =~ tr/\x82\x8A/e/;
funktioniert hier mit ActiveState Perl 5.8.8 unter Windows XP Home bestens.
Zur Erklärung: Was wie codiert ist, hängt von der eingestellten Codepage ab, bei mir ist es CP850. Gib mal in der Kommandozeile "mode con /status" ein, dann wird Dir die Codepage ausgegeben, danach richtet sich, welche Hexwerte Deine Sonderzeichen haben müssen.
Siechfred
print "Eingabe: ";
my $str = <STDIN>;
print "Codiert: ", sprintf("%02X", ord $str);
>
> Das ergibt bei mir bei Eingabe von 'é' den Wert 82, für 'è' den Wert 8A. Das Ganze angewendet:
>
> `$str =~ tr/\x82\x8A/e/;`{:.language-Perl}
Klasse, jetzt hat es geklappt.
Vielen Dank!
Grüße,
Phillipp
Klasse, jetzt hat es geklappt.
Freut mich.
Ich weiß nicht, ob das Script nur für Deinen Hausgebrauch ist, ansonsten kannst Du via Win32::Console die aktuelle Codepage auslesen und auch ändern. Denn um Dein Programm unter allen Win32-Installationen lauffähig zu halten, wäre es m.E. angebracht, vor dem Einlesen von STDIN die Codepage explizit zu setzen, die Dein Programm erwartet:
use strict;
use Win32::Console;
my $defaultCP = Win32::Console::InputCP(); # holen der aktuellen Einstellung
Win32::Console::InputCP(850) if $defaultCP != 850; # Setzen von CP850, wenn erforderlich
# hier das STDIN-Gedöns
Win32::Console::InputCP($defaultCP); # Rücksetzen auf voreigestellten Wert
Für Ausgaben in die Konsole gibt es übrigens das Gegenstück Win32::Console::OutputCP(), das auf die gleiche Art funktioniert.
Siechfred
Hallo
du ich verlier die Geduld ...
1. du postest Code der angeblich nicht funktioniert aber bei dir läufts dann doch.
2. hab ich dir gesagt du sollst einfach mit ord() die Codes ermitteln und in hex umwandeln.
Im Script klappt es leider immer noch nicht. Was muss ich anders machen?
das eigene Hirn belasten?
Leb Wohl
Kurt
Hallo,
Du bist also in der Konsole, dort werden die Zeichen anders kodiert.
Gibt es denn eine Möglichkeit, mit Accents eingegebene e's (a's, etc.) in normale e's (a's,...) umzuwandeln?
Aber ja, so wie beschrieben, wenn du die richtigen Hex-Codes der eingegebenen Zeichen kennst. Das hängt von der verwendeten Konsole ab. Unter Unix/Linux geschieht die Codierung meines Wissens gemäß ISO-8859, Unter Windows ist es meist ANSI. Es gibt je nach Ländereinstellung verschiedene ISO-8859 bzw. ANSI-Codierungen. Apple-Maschinen haben wieder eigene Codierungen.
Gruß, Don P
wie kann ich französische Buchstaben mit Accents in jene ohne Accents umwandeln? Alle Versuche mit =~s und =~tr haben nicht funktioniert...
Was war das Ergebnis? Wie ist der String im Script kodiert, UTF-8?
Muss ich vielleicht das Zeichen im Regex anders codieren?
Du kannst, musst aber nicht. Du kannst das charnames-Pragma verwenden, Du kannst die Schreibeweise \x{xx} verwenden (UTF-8) oder \x1B (Hexcode laut ASCII- bzw. ANSI-Tabelle), je nach verwendeter Zeichenkodierung.
Siechfred