hotti: Zeichen aus Codepoint erzeugen

hi,

@ChrisB, Du warst auch interessiert,

vor einiger Zeit gabs mal ein Problem, mit pack("U0U", $codepoint); dass der Browser die Zeichen nicht richtig darstellte, da fehlten Bytes. Es lag nicht am Webserver, nicht am Browser und auch nicht am Template in der pack()-Funktion. Die Lösung lautet und hiermit nachgereicht:

Pragma utf8 und Discipline in binmode():

  
use utf8;  
binmode STDOUT, ':utf8';  
print "Content-type: text/plain; charset=UTF-8\n\n";  
print pack("U0U", 228),"\näöü\n"; # alles richtig dargestellt  

Es gibt jedoch, das soll nicht verschwiegen werden, noch andere Effekte mit Pragma utf8, z.B. wird damit das Verhalten der Funktionen length() und substr() beeinflusst; length('ä') liefert dann "1" obwohl 'ä' in utf-8 eine Länge von 2 byte hat.

Die Discipline ':utf8' gibt es nicht in Perl v5.6.1, ab wann es die gibt, müsste ich nachschauen.

Hotti

  1. Moin Moin!

    Pragma utf8 und Discipline in binmode():

    Hat miteinander NICHTS zu tun. use utf8 macht exakt eine Aussage: Perl-Quelltext ist UTF-8 codiert. Punkt.

    Aus der Doku: "Do not use this pragma for anything else than telling Perl that your script is written in UTF-8."

    Die Discipline ':utf8' gibt es nicht in Perl v5.6.1, ab wann es die gibt, müsste ich nachschauen.

    Perl vor 5.8.1 ist mit Unicode ohnehin nicht zu gebrauchen (genauer: vor 5.8.0, mit dem kleinen Haken, dass gerade die 5.8.0 auch noch massive Bugs hat, die diese spezielle Version unbrauchbar machen).

    Perl 5.6.1 kam am 8 April 2001 heraus, das ist mittlerweile über 10 Jahre her. Warum schlägst Du Dich mit dermaßen veralteter Software herum? Aktuell ist Perl 5.12.3 aus dem Januar 2011, die 5.10.x-Serie gilt als veraltet, an 5.14.x wird schon gearbeitet.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Moin Moin!

      Hat miteinander NICHTS zu tun. use utf8 macht exakt eine Aussage: Perl-Quelltext ist UTF-8 codiert. Punkt.

      Sind alle meine Scripts. Auch Punkt ;)

      Warum schlägst Du Dich mit dermaßen veralteter Software herum?

      Es ist kein 'Herumschlagen', es läuft ja alles, bis auf ein paar klitzekleine Unterschiede zum Perl auf dem Server meines Providers (v5.8.8). Diese Unterschiede sind so geringfügig (1), dass ein Upgrade auf eine neue Perl-Version (noch) nicht lohnt, das kann sich möglicherweise aber sehr schnell ändern und dann kommt auch bei mit das neueste Perl drauf.

      (1) z.Z. nur ein Script betroffen, was URI::Escape verwendet

      Viele Grüße,
      schönes Wochenende,
      Hotti

    2. Aktuell ist Perl 5.12.3 aus dem Januar 2011, die 5.10.x-Serie gilt als veraltet, an 5.14.x wird schon gearbeitet.

      Und hier der Beleg dafür aus dem Mund des Kürbigs: http://rjbs.manxome.org/rubric/entry/1872

  2. Discipline

    Das heißt schon seit langer Zeit Layer.