Thread Surrogate Pairs in UTF-8 auflösen
(28 answers)
Opened by barney at 2025-08-14 14:22
Ok wir üben das mal:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 use Encode; my $char = pack "U*", 0xD83D, 0xDE00; # diese beiden Codepoints # und die zum Zeichen gehörige Bytesequenz ED A0 BD ED B8 80 printf "%X %X %X %X %X %X\n", unpack "C*", encode_utf8($char); # und jetzt umgekehrt, wir haben eine Bytesequenz und wollen die # WTF Codepoints my $bin = pack "C*", 0xED, 0xA0, 0xBD, 0xED, 0xB8, 0x80; my $zeichen = decode_utf8($bin); # intern kodiert my @codepoints = unpack "U*", $zeichen; foreach my $cp( @codepoints ){ printf "%X ", $cp; } Das gibt aus: Also, Perl kommt damit auch klar. Weil ja im Grunde genommen UTF-8 darunter liegt. Aber daß man zwei Codepoints (damit meine ich nicht die Bytes) braucht um ein einziges Zeichen zu repräsentieren, ist wirklich WTF. Weil die Bytesequenz dann 6 Bytes umfasst anstelle 4 Bytes. Was das Speichern in Datenbanken betrifft: Ich empfehle da, die Bytesequenzen zu speichern, genauso wie in Dateien. Und natürlich in einem dedizierten Feld die Kodierung festzuhalten. Damit man das wiederherstellen kann. Und diese Empfehlung beruht auf Erfahrung. mfg Last edited: 2025-08-15 10:16:31 +0200 (CEST) |