pl: Was sind "wide characters"?

Beitrag lesen

Hallo,

ich möchte HTML-Entities aus einem String entfernen:

use HTML::Entities;
print decode_entities("Wir m&oumlchten dafür 10 € haben");

Dabei erhalte diese Fehlermeldung.

Wide character in print at ...

Diese FM erscheint, weil die Entities in das Perl-interne Codierungs-Format umgewandelt wurden und somit nicht für die Ausgabe auf STDOUT geeignet sind. Es gibt 2 Möglichkeiten:

  1. use Encode; und mit $octets = encode('UTF-8', $characters, Encode::FB_CROAK); die Oktetten wiederherstellen, da müsstest Du jedoch jeden String einzeln anfassen,
  2. use bytes; vor der print Ausgabe, das sorgt dafür daß die richtigen Bytesequenzen rausgehen.

MfG

PS:

Ich habe dann probiert, was an dem String 'falsch' sein könnte und bin dann darauf gestoßen, dass das "€" das Problem ist. Nur warum?

Die FM erscheint ab 3 Bytes (Oktetten). Bei den Umlauten die nur 2 Oktetten haben kommt sie nicht, das wird noch toleriert.