Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


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

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

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From "Wolli Buechel" <wjb131@web.de>
Newsgroups de.comp.lang.python
Subject [Python-de] Re: Fwd: Codepage-Methode und Basis 4096
Date Sun, 11 Aug 2024 20:36:01 -0000
Lines 53
Message-ID <172340856191.24690.7278656943094606510@mail.python.org> (permalink)
References <B1E07CF5-53A8-41F2-A5A2-937180A3BD89@multi-matrix.de>
Mime-Version 1.0
Content-Type text/plain; charset="utf-8"
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de rpIRw8Fr5/IUTWXEwhgpHAIF10AbWhUFwH+Z7bHXClhA==
Cancel-Lock sha1:6lzMHRU4uxYlXOIHZzKB3o3Bj1A= sha256:0tWhbYX8c1F7SztL+DAEHB8KVAUMcrKjNTubJUJm5pQ=
Authentication-Results mail.python.org; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral
In-Reply-To <B1E07CF5-53A8-41F2-A5A2-937180A3BD89@multi-matrix.de>
User-Agent HyperKitty on https://mail.python.org/
Message-ID-Hash HT7OKGILEKGDUNAEHEX6OHKXD7NTZIRP
X-Message-ID-Hash HT7OKGILEKGDUNAEHEX6OHKXD7NTZIRP
X-MailFrom wjb131@web.de
X-Mailman-Rule-Misses dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-python-de.python.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version 3.3.10b1
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At <https://mail.python.org/archives/list/python-de@python.org/message/HT7OKGILEKGDUNAEHEX6OHKXD7NTZIRP/>
List-Archive <https://mail.python.org/archives/list/python-de@python.org/>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Owner <mailto:python-de-owner@python.org>
List-Post <mailto:python-de@python.org>
List-Subscribe <mailto:python-de-join@python.org>
List-Unsubscribe <mailto:python-de-leave@python.org>
Xref csiph.com de.comp.lang.python:6187

Show key headers only | 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