Der zweite Absatz bezog sich jetzt nicht speziell auf dieses Problem. Aber immer wieder wenn eine
Ansi/
Unicode Inkompatibilität auftaucht0, wird dazu geraten aus den Strings AnsiStrings zu machen, anstatt den Code entsprechend an
Unicode anzupaasen. Der einzige, der das nicht macht ist himitsu.
Wobei es hier ein klitzekleines Problem gibt.
Da hier ein "String" binär verändert wird und man keinerlei gemeinsamkeiten zwische
ANSI und
Unicode herstellen kann,
muß man sich auf ein Format einigen.
> Char/String war hier also schon immer ein Fehler.
* Entweder man macht alles mit
ANSI (AnsiString)
* oder man macht alles mit
Unicode (UnicodeString, bzw. WideString in älteren Delphis oder immer das delphifremde WideString)
* oder man lebt damit, daß die Ergebnisse nicht zwischen
ANSI- und
Unicode-kompilierten EXEn kompatibel sind
(abgesehn davon, daß RCx nunmal nicht "direkt" auf CHARs angewendet werden kann *1, da hinterher keine "korrekten" CHAR-Werte rauskommen, entsprechend dem zugrundeliegenden Encoding)
* oder man geht einen Kompromis ein und nimmt z.B. UTF-8
= in den jeweiligen Zielsystemen kann man die Texte/Variablen/Parameter ja entsprechend konvertieren, wie es einem beliebt.
-
ANSI-Speicherung/Verschlüsselung > hier könnte es sein, daß nicht alles vom
UNICODe gespeichert werden kann, aber Laden ist immer möglich
-
Unicode (UTF-8 =
Unicode) > hier kann es Probleme beim Laden geben, wenn es nach
ANSI konvertriert wird, aber speichern ist immer möglich
Und nun zu diesem speziellen Problem:
Nicht die CHARs verschlüsseln, sondern die Bytes.
Die Datei also z.B. in einen Stream laden und dann
byteweise verschlüsseln.
Ob die Datei nun
Unicode oder
ANSI ist ist dabei vollkommen egal ... Byte ist Byte.
1) Dass "früher" RCx direkt auf AnsiChar losgelassen wurde, war ein Fehler und entstand dadurch, daß "zufällig" SizeOf(AnsiChar) = SizeOf(Byte).
Da sich das Char aber angepaßt hat und jetzt ein WideChar ist, ergibt sie dieses Problem des SizeOf(WideChar) <> SizeOf(Byte), da RCx nunmal als byteweise Kodierung entwickelt wurde und am Ende auch noch "unberechenbare" Bytes rauskommen können, welche eine TEXT-weise Verrbeitung unmöglich macht.