Thread HTML::Parser und substr()
(46 answers)
Opened by GwenDragon at 2023-05-09 13:09 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 use strict; use warnings; # auf diese Art und Weise entstehen # alle Zeichen mit UTF-8-Kodierung # es gilt die Charactersemantic my $ae_1 = chr 0xe4; my $ae_2 = "\N{U+e4}"; my $ae_3 = "\N{LATIN SMALL LETTER A WITH DIAERESIS}"; my $euro = "\N{EURO SIGN}"; print $euro; # Wide character in print, Fehler! use bytes; # schalte um auf bytesemantic print $euro; # Ausgabe OK Für Zeichen die per pack "U", $codepoint; erzeugt werden gilt ebenfalls die Bytesemantic, diese Zeichen betrachtet Perl intern als utf-8-kodierte Zeichen. Sofern nicht mit use bytes; auf Bytesemantic umgeschaltet wurde. In Dateien gibt es keine Kodierung. Dateien speichern nur Bytes. Das gilt auch für die Scriptdatei selbst, lenght "ä" liefert per Default also 2. Es sei denn pragma use utf8; wurde gesetzt, dann gilt wieder die charsemantic und length liefert 1. Dieses Verhalten zeigt Perl ab v5.6.1 also seit etwa 2004. Wobei die Unicodeunterstützung in diesen Perlversionen mangelhaft war. Encode kam erst mit v5.8.8 in den Core. Und noch etwas: Unicode ist keine Kodierung sondern die Verwaltung. Es gibt also keine Unicode-Zeichen. UTf-8 ist ein Serialize-Algorithmus welcher den Zusammenhang zwischen Codepoint und Bytesequenz beschreibt. Dieser Algorithmus steckt in der U-Schablone für die pack()-Funktion und ist natürlich auch in Encode implementiert. Mittlerweile ist dieser Algorithmus auch in JavaScript angekommen, so daß man entweder bytesemantisch oder charsemantisch vorgehen kann (TextDecoder and TextEncoder). MFG und weiterhin viel Spaß mit Perl ;) |