![]() |
Base64 case insensitive
Ich kodiere einen String mit
![]() Nach dem Speichern kann ich nicht mehr zwischen Groß- und Kleinschreibung unterscheiden. Gibt es ein alternatives Alphabet für Base64, bei dem die Buchstaben 'a' bis 'z' durch 26 andere Zeichen (!$%&/()=? usw.) ersetzt sind? |
AW: Base64 case insensitive
Base64 bedeutet nur, daß "es auf Basis von 64 Zeichen" kodiert ist.
Der Zeichensatz ist dabei grundsätzlich egal. Bei "guten" Funktionen/Klassen, welche nach Base64 umkodieren, kann man den Zeichensatz angeben. Allerdings hast du ja nicht gesagt, was du derzeit dafür nutzt. :zwinker: |
AW: Base64 case insensitive
![]() Natürlich kannst du auch für Base64 einen Encoder schreiben, der nicht das Standard-Alphabet benutzt, wenn du eine höhere Packeffizienz erreichen willst. Aber viel Spaß dabei, 32 Sonderzeichen zu finden, die du benutzen kannst ;) |
AW: Base64 case insensitive
Zitat:
Base64 selber hat kein Alphabet ... es wird nur oftmals das Eine bekannte verwendet, aber es gibt einige Kodierungen, welche einen anderen Zeichensatz verwenden, wobei sich bisher alle, welche ich so kenne, in 0-9a-zA-Z gleichen und nur die restlichen 2 Zeichen unterscheiden, sowie bei dem einen Zusatzzeichen (welches für eine "ungerade" Byteanzahl die zuviel kodierten Bytes kennzeichnen) MIME-Encode nee, MIME war's nicht, aber egal (ich hoffe ich verwechel das grade nicht schonwieder, da es für URLs entworfen wurde) kann das dort ![]() |
AW: Base64 case insensitive
Zitat:
Dass ich den Vorrats von 64 (+1 für Endekennung) Zeichen umdefinieren kann ist klar. Bei Decodieren muss dies natürlich wieder rückgängig gemacht werden. Mir geht es darum zu fragen ob sich schon mal jemand die Mühe gemacht hat, die Kleinbuchstaben durch andere Zeichen zu ersetzen. Bin jetzt gerade fündig geworden:
Code:
/**
* This array is a lookup table that translates 6-bit positive integer * index values into their "Base64 Alphabet" equivalents as specified * in Table 1 of RFC 2045. */ private static final char intToBase64[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; /** * This array is a lookup table that translates 6-bit positive integer * index values into their "Alternate Base64 Alphabet" equivalents. * This is NOT the real Base64 Alphabet as per in Table 1 of RFC 2045. * This alternate alphabet does not use the capital letters. It is * designed for use in environments where "case folding" occurs. */ private static final char intToAltBase64[] = { '!', '"', '#', '$', '%', '&', '\'', '(', ')', ',', '-', '.', ':', ';', '<', '>', '@', '[', ']', '^', '`', '_', '{', '|', '}', '~', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '?' }; Zitat:
|
AW: Base64 case insensitive
Warum geht denn die Groß/Kleinschreibung verloren?
Grundsätzlich hast du etwa 96 Zeichen in ASCII und 223 in ANSI zur Verfügung, wobei es bei ANSI auch wieder einige Zeichen mit Groß/Kleinschreibung gibt und sich dieses auch noch je nach Codepage ändern kann. 96 - 26 (Groß- oder Kleinbuchstaben) = 70, was wohl ausreichen sollte, so daß du dich nur noch entscheiden mußt, welche 6 Zeichen du nicht magst. :mrgreen: [add] hier eine Auswahl: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~ !"#$%&'()*+,-./0123456789:;<=>?@[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ mußt nur noch 4 Zeichen rauslöschen und schon hast du deinen Zeichensatz. [add] Zitat:
und eine Base256 wäre auch ganz schnell gebaut (CopyMemory :lol: ), aber diese hätte dann wieder dein Groß-/Kleinschreibungsproblemchen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz