Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.python > #6187

[Python-de] Re: Fwd: Codepage-Methode und Basis 4096

From "Wolli Buechel" <wjb131@web.de>
Newsgroups de.comp.lang.python
Subject [Python-de] Re: Fwd: Codepage-Methode und Basis 4096
Date 2024-08-11 20:36 +0000
Message-ID <172340856191.24690.7278656943094606510@mail.python.org> (permalink)
References <B1E07CF5-53A8-41F2-A5A2-937180A3BD89@multi-matrix.de>

Show all headers | View raw


Hallo Herr Schnoor,

danke für die Zusendung der Datei Codepage-univers.py. 
Diese Datei enthält allerdings keine Berechnung von Bytes, weder eine fehlerhafte noch eine korrekte.

Die zuvor übersandte Datei keyboard-coding-asia.py enthält jedoch eine solche Berechnung. 
Dort wird die Anzahl der Bytes eines Strings mittels der Funktion unit() bestimmt, und zwar so:

def unit(digit):             # --------------------- Analyse der Anzahl <bits> ---------------------
    # digit = Ordnungszahl ord(ch) eines UTF8-Zeichens ch (Einfügung von mir, WB)
    if digit < 256:
        byte = 1
    elif digit > 256 and digit < 65536:
        byte = 2
    elif digit > 65535 and digit <16777215:
        byte = 3
    elif digit > 16777215:
        byte = 4
    return byte

Wie dieser Python-Coder verrät, sind – oder waren – Sie offenbar davon überzeugt, dass für die Codierung der Codepoint-Nummer eines UTF8-Zeichens für jedes der möglichen 1/2/3/4 Bytes alle 8 Bit eines Bytes zur Verfügung stehen. (Für 1 Byte 2**8 = 256 Bit, für 2 Byte 2**16 = 65536 Bit, etc.) 

Dies ist jedoch nicht der Fall. Denn die Bytes enthalten – zusätzlich zur Codepoint-Nummer – noch einen Geheimcode (den Sie als Experte für Codierung – unbegreiflicherweise – nicht zu kennen scheinen). 
Dieser Geheimcode ist eine Markierung dafür, aus wie vielen Byte ein Zeichen besteht. 
Bei einem Ein-Byte-Zeichen beginnt dieses Solo-Byte mit einem 0-Bit. 
Ein Mehr-Byte-Zeichen besteht logischerweise aus einer Gruppe zusammengehöriger Bytes, 
einem sogenannten Start-Byte und ein oder mehreren Folge-Bytes: 
Das Start-Byte beginnt mit einer Folge von 1-Bits, deren Anzahl gleich der Anzahl der Folge-Bytes entspricht (11, 111, 1111 = 2,3,4 Folge-Bytes). 

In der folgenden Tabelle sind die Intervalle der Ordnungszahlen für 1/2/3/4 Bytes 
sowie die geheime Bit-Struktur des Codes dargestellt ( vgl. https://en.wikipedia.org/wiki/UTF-8#Encoding ):

Code point ↔ UTF-8 conversion
First code point		Last code point		Byte 1		Byte 2		Byte 3		Byte 4
U+0000		U+007F		0xxxxxxx
U+0080		U+07FF		110xxxxx	10xxxxxx
U+0800		U+FFFF		1110xxxx	10xxxxxx	10xxxxxx
U+010000		U+10FFFF		11110xxx	10xxxxxx	10xxxxxx	10xxxxxx

Aufgrund der Ordnung der Intervalle nach Byte-Anzahlen kann man nun aus der Ordnungszahl ord(ch) eines UTF8-Zeichens ch leicht seine Byteanzahl berechnen, etwa mit folgender Python-Funktion:

def getNumBytes(ch):
    "liefert die Anzahl der Bytes (1 bis 4) des UTF8-Zeichens ch via ord(ch)"
    MaxUTF8 = 1114111
    point = ord(ch)
    if point in range(0, 2**7): return 1
    elif point in range(2**8, 2**11): return 2
    elif point in range(2**11, 2**16): return 3
    elif point in range(2**16, 1 + MaxUTF8): return 4

Dieser Geheimcode ist doch clever gemacht von den Entwicklern der UTF8-Codierung der Unicode-Zeichen, oder?

W. Büchel

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

[Python-de] Re: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-09 05:18 +0000
  [Python-de] Fwd: Codepage-Methode und Basis 4096 Erich Schnoor <eschnoor@multi-matrix.de> - 2024-08-09 11:25 +0200
    [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-09 17:50 +0000
      [Python-de] Fwd: Codepage-Methode und Basis 4096 Erich Schnoor <eschnoor@multi-matrix.de> - 2024-08-09 21:52 +0200
        [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-10 08:25 +0000
          [Python-de] Fwd: Codepage-Methode und Basis 4096 Erich Schnoor <eschnoor@multi-matrix.de> - 2024-08-10 11:48 +0200
            [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-13 09:28 +0000
        [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-10 16:36 +0000
          [Python-de] Fwd: Codepage-Methode und Basis 4096 Erich Schnoor <eschnoor@multi-matrix.de> - 2024-08-11 11:44 +0200
            [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-11 15:22 +0000
              [Python-de] Fwd: Codepage-Methode und Basis 4096 Erich Schnoor <eschnoor@multi-matrix.de> - 2024-08-11 19:06 +0200
                [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-11 20:36 +0000
                [Python-de] Re: Fwd: Codepage-Methode und Basis 4096 "Wolli Buechel" <wjb131@web.de> - 2024-08-11 20:40 +0000

csiph-web