Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder Šš funktionieren soll. Mit tr bin ich dazu nicht weitergekommen. Al
Hallo, Am Sam, 02 Sep 2006, Al Bogner schrieb:
Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder ?? funktionieren soll. Mit tr bin ich dazu nicht weitergekommen.
$ echo 'ICH MÖCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA "MEIN HAUS" IN "MEIN HAUS", WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? ??ßÄ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN.' \ | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich Möchte Großbuchstaben In Worte Wandeln, Also Etwa "Mein Haus" In "Mein Haus", Wobei Dies Auch Bei Zb Öö Oder ?? ??ßä Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen. Warum das bei den ? und ? nicht klappt liegt evtl. an meiner locale. Mit den Ö und den anderen Umlauten klappt es aber. Hintergrund ist, daß in der verwendeten locale eben auch die passenden Zuordnungen von Klein- zu Großbuchstaben (und umgekehrt) definiert sein müssen. Das scheint bei mir (LANG=de_DE.ISO-8559-15) für die deutschen Umlaute der Fall zu sein, bei ? aber nicht. Achso, ich habe auch noch ne glibc-2.1.3, ich weiß gerade nicht, ob perl für das die Funktionen der libc verwendet oder selber was mitbringt... Achso: Die Wandlung des korrekten "GROSSBUCHSTABEN" in "Großbuchstaben" klappt auch nicht, da kannst du aber wohl selber nachvollziehen warum... HTH, -dnh -- Now you're being rational. Stop that at once! -- P. Tomblin
Am Samstag, 2. September 2006 02:38 schrieb David Haller: Hallo David,
Am Sam, 02 Sep 2006, Al Bogner schrieb:
Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder ?? funktionieren soll. Mit tr bin ich dazu nicht weitergekommen.
$ echo 'ICH MÖCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA "MEIN HAUS" IN "MEIN HAUS", WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? ??ßÄ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN.' \
| perl -Mlocale -pe 's/\w+/\u\L$&/g'
echo "Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder Šš funktionieren soll. Mit tr bin ich dazu nicht weitergekommen." | tr '[[:lower:]]' '[[:upper:]]' ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB Öö ODER Šš FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN. tr kann also nicht š zu Š wandeln, obwohl locale LANG=de_AT.UTF-8 LANGUAGE=de_AT:de_DE:de:en_GB:en LC_CTYPE="de_AT.UTF-8" echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ŠŠ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich MöChte GroßBuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein Haus, Wobei Dies Auch Bei Zb ÖÖ Oder ŠŠ Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen. Ich würde meinen, die übliche Problmatik, die ich seit langer Zeit kenne. Sieh dir mal "MöChte" an oder "Bei Zb ÖÖ Oder ŠŠ". Das ist leider nicht brauchbar, da kann ich gleich selber etwas mit individuellen Ausnahmen basteln, wie ich es schon jetzt habe. Auf Dauer werden es jedoch immer mehr Ausnahmen, die ich mit sed verarbeite.
Hintergrund ist, daß in der verwendeten locale eben auch die passenden Zuordnungen von Klein- zu Großbuchstaben (und umgekehrt) definiert sein müssen.
Das aber nicht passen dürfte. Al
Hallo, Am Sam, 02 Sep 2006, Al Bogner schrieb:
Am Samstag, 2. September 2006 02:38 schrieb David Haller:
Am Sam, 02 Sep 2006, Al Bogner schrieb:
Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder ?? funktionieren soll. Mit tr bin ich dazu nicht weitergekommen.
$ echo 'ICH MÖCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA "MEIN HAUS" IN "MEIN HAUS", WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? ??ßÄ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN.' \
| perl -Mlocale -pe 's/\w+/\u\L$&/g'
echo "Ich möchte Großbuchstaben in Worte wandeln, also etwa "MEIN HAUS" in "Mein Haus", wobei dies auch bei zB Öö oder ?? funktionieren soll. Mit tr bin ich dazu nicht weitergekommen." | tr '[[:lower:]]' '[[:upper:]]' ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB Öö ODER ?? FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU ^^ NICHT WEITERGEKOMMEN.
tr kann also nicht ? zu ? wandeln, obwohl
Irgendwas stimmt mit deiner Kodierung nicht, deine Mail ist als ISO-8859-15 deklariert, im Text steht '??ßÄ', vielleicht irgendwas komisches aus UTF-8... BTW: generell kann tr das weitgehend: $ perl -e 'print join("", map { chr($_); } 160..255 ), "\n";' | tr '[[:lower:]]' '[[:upper:]]' ¡¢£?¥?§?©ª«¬®¯°±²³?µ¶·?¹º»???¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ $ locale LANG=en_US.ISO_8859-15 LC_CTYPE="en_US.ISO_8859-15" LC_NUMERIC="en_US.ISO_8859-15" LC_TIME="en_US.ISO_8859-15" LC_COLLATE=POSIX LC_MONETARY="en_US.ISO_8859-15" LC_MESSAGES="en_US.ISO_8859-15" LC_ALL= Es klappt also beim à (latin9:0xE0) bis þ (latin9:0xFE). Für den Rest fehlen in meiner Locale (wie gesagt glibc-2.1.3 [1]) wohl noch die Zuordnungen. [1] /lib/libc.so.6 --version GNU C Library stable release version 2.1.3, by Roland McGrath et al. [..] Compiled on a Linux 2.2.14 system on 2000-03-24.
locale LANG=de_AT.UTF-8 LANGUAGE=de_AT:de_DE:de:en_GB:en LC_CTYPE="de_AT.UTF-8"
Versuch's mal auch mit ner anderen Locale.
echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich MöChte GroßBuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein Haus, Wobei Dies Auch Bei Zb ÖÖ Oder ?? Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen.
Das sieht schon besser aus, da scheint nur die Worterkennung nicht zu klappen. Versuch's mal mit | perl -Mutf8 -Mlocale -pe 's/\w+/\u\L$&/g' oder so. Bei mir klappt das obige: $ echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETW MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? åÅ éÉ àÀ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich Möchte Großbuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein ^^ ^^ Haus, Wobei Dies Auch Bei Zb Öö Oder ?? Åå Éé Àà Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen. $ perl -e 'print join("", map{chr($_).uc(chr($_))." ";} 160..255),"\n";' \ | perl -Mlocale -pe 's/\w+/\u\L$&/g' ¡¡ ¢¢ ££ ?? ¥¥ ?? §§ ?? ©© ªª «« ¬¬ ®® ¯¯ °° ±± ²² ³³ ?? µµ ¶¶ ·· ?? ¹¹ ºº »» ?? ?? ?? ¿¿ Àà Áá Ââ Ãã Ää Åå Ææ Çç Èè Éé Êê Ëë Ìì Íí Îî Ïï Ðð Ññ Òò Óó Ôô Õõ Öö ×× Øø Ùù Úú Ûû Üü Ýý Þþ ßß Àà Áá Ââ Ãã Ää Åå Ææ Çç Èè Éé Êê Ëë Ìì Íí Îî Ïï Ðð Ññ Òò Óó Ôô Õõ Öö ÷÷ Øø Ùù Úú Ûû Üü Ýý Þþ ÿÿ [Umbruch von mir nachträglich] Da scheint's das gleiche wie beim tr zu sein. Perl übrigens wegen der Worterkennung. Mit tr, sed und awk wird es häßlich.
Ich würde meinen, die übliche Problmatik, die ich seit langer Zeit kenne. Sieh dir mal "MöChte" an oder "Bei Zb ÖÖ Oder ??". Das ist leider nicht brauchbar, da kann ich gleich selber etwas mit individuellen Ausnahmen basteln, wie ich es schon jetzt habe. Auf Dauer werden es jedoch immer mehr Ausnahmen, die ich mit sed verarbeite.
Die kannst du auch in perl erledingen. Welche Perl-Version verwendest du? Und die Ausgabe von: perl -Mutf8 -e 'print "$utf8::VERSION\n";'? Ggfs. kannst du auch in perl die Locale noch ändern. -dnh -- "Das ist aber nett. Haftcreme mit Chili-Geschmack ..." -- O. Schad
Am Samstag, 2. September 2006 20:43 schrieb David Haller: Hallo David,
Irgendwas stimmt mit deiner Kodierung nicht, deine Mail ist als ISO-8859-15 deklariert, im Text steht '??ßÄ', vielleicht irgendwas komisches aus UTF-8...
Vielleicht liegt es an KMail, das wählt die Kodierung automatisch.
BTW: generell kann tr das weitgehend:
$ perl -e 'print join("", map { chr($_); } 160..255 ), "\n";' | tr '[[:lower:]]' '[[:upper:]]' ¡¢£?¥?§?©ª«¬®¯°±²³?µ¶·?¹º»???¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ
~> cat /etc/issue Welcome to SUSE LINUX 10.0 (i586) - Kernel \r (\l). perl -v This is perl, v5.8.7 built for i586-linux-thread-multi glibc 2.3.5-40 ~> perl -e 'print join("", map { chr($_); } 160..255 ), "\n";' | tr '[[:lower:]]' '[[:upper:]]' ���������������������������� ~> cat /etc/issue Welcome to SUSE LINUX 10.1 (i586) - Kernel \r (\l). perl -v This is perl, v5.8.8 built for i586-linux-thread-multi # perl -e 'print join("", map { chr($_); } 160..255 ), "\n";' | tr '[[:lower:]]' '[[:upper:]]' ���������������������������� Also auch als root ändert sich (wie erwartet) nichts. ~$ cat /etc/issue Debian GNU/Linux testing/unstable \n \l perl -v This is perl, v5.8.8 built for i486-linux-gnu-thread-multi ~$ perl -e 'print join("", map { chr($_); } 160..255 ), "\n";' | tr '[[:lower:]]' '[[:upper:]]' ���������������������������� Auf allen 3 Rechnern (Suse 10.0, Suse 10.1, Debian Etch) kommt da also nichts brauchbares raus. Es ist mir aber auch nicht so wichtig, es war einfach mal eine Frage.
$ locale LANG=en_US.ISO_8859-15 LC_CTYPE="en_US.ISO_8859-15" LC_NUMERIC="en_US.ISO_8859-15" LC_TIME="en_US.ISO_8859-15" LC_COLLATE=POSIX LC_MONETARY="en_US.ISO_8859-15" LC_MESSAGES="en_US.ISO_8859-15" LC_ALL=
Es klappt also beim à (latin9:0xE0) bis þ (latin9:0xFE). Für den Rest fehlen in meiner Locale (wie gesagt glibc-2.1.3 [1]) wohl noch die Zuordnungen.
[1] /lib/libc.so.6 --version GNU C Library stable release version 2.1.3, by Roland McGrath et al. [..] Compiled on a Linux 2.2.14 system on 2000-03-24.
locale LANG=de_AT.UTF-8 LANGUAGE=de_AT:de_DE:de:en_GB:en LC_CTYPE="de_AT.UTF-8"
Versuch's mal auch mit ner anderen Locale.
echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich MöChte GroßBuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein Haus, Wobei Dies Auch Bei Zb ÖÖ Oder ?? Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen.
Das sieht schon besser aus, da scheint nur die Worterkennung nicht zu klappen. Versuch's mal mit
| perl -Mutf8 -Mlocale -pe 's/\w+/\u\L$&/g'
echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETWA MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ŠŠ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mutf8 -Mlocale -pe 's/\w+/\u\L$&/g' Ich MöChte GroßBuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein Haus, Wobei Dies Auch Bei Zb ÖÖ Oder ŠŠ Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen.
oder so. Bei mir klappt das obige:
$ echo "ICH MöCHTE GROßBUCHSTABEN IN WORTE WANDELN, ALSO ETW MEIN HAUS IN MEIN HAUS, WOBEI DIES AUCH BEI ZB ÖÖ ODER ?? åÅ éÉ àÀ FUNKTIONIEREN SOLL. MIT TR BIN ICH DAZU NICHT WEITERGEKOMMEN." | perl -Mlocale -pe 's/\w+/\u\L$&/g' Ich Möchte Großbuchstaben In Worte Wandeln, Also Etwa Mein Haus In Mein ^^ ^^ Haus, Wobei Dies Auch Bei Zb Öö Oder ?? Åå Éé Àà Funktionieren Soll. Mit Tr Bin Ich Dazu Nicht Weitergekommen.
$ perl -e 'print join("", map{chr($_).uc(chr($_))." ";} 160..255),"\n";' \
| perl -Mlocale -pe 's/\w+/\u\L$&/g'
¡¡ ¢¢ ££ ?? ¥¥ ?? §§ ?? ©© ªª «« ¬¬ ®® ¯¯ °° ±± ²² ³³ ?? µµ ¶¶ ·· ?? ¹¹ ºº »» ?? ?? ?? ¿¿ Àà Áá Ââ Ãã Ää Åå Ææ Çç Èè Éé Êê Ëë Ìì Íí Îî Ïï Ðð Ññ Òò Óó Ôô Õõ Öö ×× Øø Ùù Úú Ûû Üü Ýý Þþ ßß Àà Áá Ââ Ãã Ää Åå Ææ Çç Èè Éé Êê Ëë Ìì Íí Îî Ïï Ðð Ññ Òò Óó Ôô Õõ Öö ÷÷ Øø Ùù Úú Ûû Üü Ýý Þþ ÿÿ
[Umbruch von mir nachträglich]
perl -e 'print join("", map{chr($_).uc(chr($_))." ";} 160..255),"\n";' | perl -Mlocale -pe 's/\w+/\u\L$&/g' � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Da scheint's das gleiche wie beim tr zu sein. Perl übrigens wegen der Worterkennung. Mit tr, sed und awk wird es häßlich.
Ich würde meinen, die übliche Problmatik, die ich seit langer Zeit kenne. Sieh dir mal "MöChte" an oder "Bei Zb ÖÖ Oder ??". Das ist leider nicht brauchbar, da kann ich gleich selber etwas mit individuellen Ausnahmen basteln, wie ich es schon jetzt habe. Auf Dauer werden es jedoch immer mehr Ausnahmen, die ich mit sed verarbeite.
Die kannst du auch in perl erledingen. Welche Perl-Version verwendest du? Und die Ausgabe von: perl -Mutf8 -e 'print "$utf8::VERSION\n";'?
perl -Mutf8 -e 'print "$utf8::VERSION\n";' 1.05 perl -Mutf8 -e 'print "$utf8::VERSION\n";' 1.06 Al
participants (2)
-
Al Bogner
-
David Haller