Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

Never reveal your best argument.


rocksolid / de.comp.text.misc / Unicode-Normalisierung (was: Normalisierung? - Was geschieht hierbei? - do not ignore )

SubjectAuthor
o Unicode-Normalisierung (was: Normalisierung? - Was geschieht hierbei? - do not iMarcel Logen

1
Subject: Unicode-Normalisierung (was: Normalisierung? - Was geschieht hierbei? - do not ignore )
From: Marcel Logen
Newsgroups: de.test, de.comp.text.misc
Followup: de.comp.text.misc
Organization: Bureau Logen
Date: Sun, 2 Jul 2023 14:58 UTC
References: 1 2 3 4 5 6 7 8 9 10 11 12 13
Path: i2pn2.org!i2pn.org!news.swapon.de!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.tota-refugium.de!.POSTED!not-for-mail
From: 33320000...@ybtra.de (Marcel Logen)
Newsgroups: de.test,de.comp.text.misc
Subject: Unicode-Normalisierung (was: Normalisierung? - Was geschieht hierbei? - do not ignore )
Followup-To: de.comp.text.misc
Date: Sun, 2 Jul 2023 16:58:03 +0200
Organization: Bureau Logen
Message-ID: <20230702su145803@o15.ybtra.de>
References: <01l2nj-r6h4.ln1@martin.dont-email.me> <tmm2nj-g5p4.ln1@martin.dont-email.me> <0045nj-3275.ln1@martin.dont-email.me> <3q55nj-g285.ln1@martin.dont-email.me> <b033.8dbe.dt.1176tin@barghahn-online.de> <c7d5nj-nia5.ln1@martin.dont-email.me> <20230701sa142419@o15.ybtra.de> <dl56nj-hkg6.ln1@martin.dont-email.me> <20230701sa181217@o15.ybtra.de> <52o7nj-fm2.ln1@martin.dont-email.me> <20230702su090059@o15.ybtra.de> <AABkoXymtIsAAAqB.A3.flnews@WStation7.micha.freeshell.org> <b034.c538.dt.1180flnews@barghahn-online.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit
Injection-Info: tota-refugium.de;
logging-data="2170845"; mail-complaints-to="abuse@news.tota-refugium.de"
Keywords: ignore
User-Agent: flnews/1.2.1pre0testml (for GNU/Linux)
Cancel-Lock: sha1:sAAS/V17XDY6Pl9wSKdjzsAZGtg=
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAADFBMVEXM5v8A1TNmMwAAZv+/f9b9AAAAcUlEQVR4nL3SvQ2AIBCA0RM7Gta4IUh0CfchTkIonYKR3ACt4KOgwMLrXo77S5ADIbvUWH6EuWKDFW3QlxVRTAASYE7A8pkSEUih64Y5yg0sd5s5biuFGUd44gbWDDgZZbqavttojmeNK3n6nu/gF3sAfnErhzhnmHYAAAAASUVORK5CYII=
X-Face: m7Q5_ZI8S)mP;Rm(XWVW!+SGOBz$^1@H)x+"CZNu9go%.[r>R2m4OTUZTHXn~"/z9E02Ou?ZlR(v&IvGz/mQeo$`dY1Jm>9ozQDN\cbA:$#.K94p8PX:rf|#\E.9kNq;O+`ut{XieI^}$_9I:R)uT%KfsJ=
X-User-ID: eJwFwYEBwCAIA7CXitqC5wiM/09Ywi1T+RF1OJySLvrLgOPVZPeG+V1tE5WMZ17UDE5CK/gDJ80RLg==
View all headers

Thomas Barghahn in de.test:

[Unicode]
>Könnten wir vielleicht einmal ein /einfaches Beispiel/ besprechen,
>sodass auch jedem Leser klar wird, was mit einer Normalisierung an-
>gestrebt wird und wozu sie eigentlich notwendig ist?

Als Einstiegspunkt könnte man
<https://www.unicode.org/reports/tr15/#Norm_Forms> nehmen.

Dort etwa das Beispiel mit dem "q" aus Figure 5:
<https://www.unicode.org/reports/tr15/images/UAX15-NormFig5.jpg>.

Wir benötigen auch die aktuelle (Unicode v15) Datei
"UnicodeData.txt":
<https://www.unicode.org/Public/15.0.0/ucd/UnicodeData.txt>.

Ich erzeuge (hier mit Perl) die Unicode-Codepoint-Folge "<U+0071>
<U+0307><U+0323>" mit den Codepoints (aus der UnicodeData.txt)

0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;

| user15@o15:~/ybtra-o15/unicode-tools$ perl -X -e 'print "\N{U+0071}\N{U+0307}\N{U+0323}"' | ./parser-utf-8-1500-nb020.py
| 71 01110001 => q
| CC 11001100 UTF-8: start
| 87 10000111 ... continuation
| CC87 => U+0307 COMBINING DOT ABOVE
| 775 - Block: Combining Diacritical Marks (0300-036F, 768-879)
| CC 11001100 UTF-8: start
| A3 10100011 ... continuation
| CCA3 => U+0323 COMBINING DOT BELOW
| 803 - Block: Combining Diacritical Marks (0300-036F, 768-879)

Dabei zeigt mein Script "parser-utf-8-1500-nb020.py" die
Bytes und Codepoints einzeln an - in der Reihenfolge, wie
sie gesendet wurden, also zuerst das "q", dann den "DOT
ABOVE" und zuletzt den "DOT BELOW".

Mit dem Tool "uconv" kann man die Reihenfolge der Codepoints
nach NFC konvertieren:

| user15@o15:~/ybtra-o15/unicode-tools$ perl -X -e 'print "\N{U+0071}\N{U+0307}\N{U+0323}"' | uconv -x 'any-nfc;' | ./parser-utf-8-1500-nb020.py
| 71 01110001 => q
| CC 11001100 UTF-8: start
| A3 10100011 ... continuation
| CCA3 => U+0323 COMBINING DOT BELOW
| 803 - Block: Combining Diacritical Marks (0300-036F, 768-879)
| CC 11001100 UTF-8: start
| 87 10000111 ... continuation
| CC87 => U+0307 COMBINING DOT ABOVE
| 775 - Block: Combining Diacritical Marks (0300-036F, 768-879)

Jetzt sieht man, daß sich für NFC die Reihenfolge der DOTs
verändert hat.

Wenn man Unicode-Strings byteweise vergleichen möchte, könnte
man dafür also NFC benutzen.

Die oben bei der UnicodeData.txt angegebenen Werte "220" und
"230" sind die sog. "ccc" (canonical combining classes) der
jeweiligen Codepoints. Um zur Normalform D (decomposed) zu ge-
langen, müssen die COMBINING Codepoints so umsortiert werden,
daß die ccc aufsteigend sortiert sind.

<https://www.unicode.org/reports/tr15/#Description_Norm>

(NFKC und NFKD würde ich erst mal nicht weiter beachten.)

tbc ...

Marcel

fup2 de.comp.text.misc
--
╭────╮ ╭─────╮ ╭──╮ ╭─╮ ╭──╮ ..48..╭──────╮ ╭─╮
╯ ╭─╯ ╰───╮ │ ..26..│ ╰─╯ ╰─╯ ╰─╮ ╭─╮ │ ╭───╯ │ ╰─╮ ╭─
╭─╯ ╭───╯ ╰─╮ ╭─╮ ╭─╮ ╭──╯ ..40..╰─╯ │ ╭─╯ ╰────╮ │ ╰─╯
╰──────╯ ╰───╯ ╰─╯ ╰─╯ ╰─╯ ╰──╯ ..67..


rocksolid / de.comp.text.misc / Unicode-Normalisierung (was: Normalisierung? - Was geschieht hierbei? - do not ignore )

1
server_pubkey.txt

rocksolid light 0.9.12
clearnet tor