Thema: Delphi RcX die Hundertste

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.274 Beiträge
 
Delphi 12 Athens
 
#10

AW: RcX die Hundertste

  Alt 21. Dez 2011, 09:48
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Dez 2011 um 09:57 Uhr)
  Mit Zitat antworten Zitat