[Vienna-pm] Re: unicode
Peter J. Holzer
hjp at wsr.ac.at
Thu Sep 30 03:45:56 CDT 2004
On 2004-09-29 23:29:17 +0200, peter pilsl wrote:
> Peter J. Holzer wrote:
> >
> >Das Flag ist weder "gut" noch "schlecht", es dient dazu, zwei
> >Datentypen zu unterscheiden. Wenn es gesetzt ist, repräsentiert die
> >Bytefolge C3 A4 ein "ä", wenn es nicht gesetzt ist, repräsentiert sie
> >die zwei Zeichen mit den Codes C3 und A4 im lokalen Zeichensatz (in
> >Latin-1 LATIN CAPITAL LETTER A WITH TILDE und CURRENCY SIGN).
> >
>
> Vielen 1000 Dank.
>
> ... und der character E4 ist dann eine "zusammenfassung" der folge C3 A4
> bei gesetztem utf8-flag ?! (E4=ä in der unicode-table)
Ja. Die Kodierung ist in perlunicode (unter "Unicode Encodings", wie
einfallsreich) beschrieben.
> Ich hab mir dein script im anderen posting angesehen (danke !!). Dein
> Beispiel sortiert bei mir auch richtig. Aber generell sortiert es bei
> mir falsch. Probier mal ä ö ü a b. Das ergibt bei mir a ö ä ü b !!
Bei mir nicht.
> Und das ist falsch.
Siehe unten.
> upgrade u encode tut hier übrigens nicht das gleiche, obwohl ich das
> eigentlich erwartet habe. upgrade ist ein nop, die nur das utf8-flag
> setzt.
Nein, es ist kein nop. Tatsächlich wird hier jedes Byte in eine
utf-8-Folge umgewandelt. Im Normalfall merkst Du aber nichts davon, weil
perl weiß, dass das ein UTF-8-String ist und ihn entsprechend behandelt.
utf8::upgrade($s) ist äquivalent zu Encoding::decode("iso-8859-1", $s)
> encode setzt auch das utf8-flag, aber fasst eben auch c3a4 zu dem
> character e4 zusammen.
> Obwohl das intern sicher immer noch ein c3a4 ist,
So ist es.
> aber wie wird das dann
> unterschiedlich interpretiert?
Im ersten Fall ist das intern eben nicht mehr c3 a4, sondern
c3 83 c2 a4 (also die UTF-Kodierung von \u00C3 \u00A4.
> Das script:
> zu jedem string werden über die methode ustat auch ein hexdump und die
> utf8-flags ausgegeben.
>
> --------------------------------------
> #!/usr/local/bin/perl -w
> use strict;
>
> use POSIX qw(locale_h);
> use locale;
> setlocale(LC_COLLATE, "de_AT");
^^^^^
de_AT ist mit hoher Wahrscheinlichkeit falsch.
Das ist wahrscheinlich eine Locale mit iso-8859-15, nicht mit UTF-8.
Probier mal de_AT.utf8. Bei mir sortiert er dann richtig. (und wenn ich
binmode STDOUT, ":utf8" setze, schaut der Output auf einem
UTF-8-Terminal auch richtig aus).
> ps: ein string der art 61 c3 a4 62 mit ungesetztem utf8-flag ist auch
> exakt das, was das CGI-Modul an parametern liefert.
Den musst Du dann noch dekodieren. Wäre natürlich schön, wenn das
CGI-Modul das selbst könnte, scheint aber laut man-Page nicht so zu
sein.
hp
--
_ | Peter J. Holzer | Shooting the users in the foot is bad.
|_|_) | Sysadmin WSR / LUGA | Giving them a gun isn't.
| | | hjp at wsr.ac.at | -- Gordon Schumacher,
__/ | http://www.hjp.at/ | mozilla bug #84128
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 384 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/20040930/b4ddd2ba/attachment.bin
More information about the Vienna-pm
mailing list