Hallo stefan,
Du schriebst am Wed, 22 Jul 2020 07:13:57 +0200:
> > Delphi 7 -> ASCII, ISO8859-* o.ä., Lazarus -> UTF-8
...
> Problem ist, ich verwende die Strings um Telegramme zusammen zu bauen.
Solange das ASCII- (ANSI-) _Byte_-Zeichen-Codes sind, sollte das auch
gehen. Umlaute u.ä. sind aber keine, müssen also "geeignet" kodiert werden,
und das ist von verschiednenen Umständen abhängig. Deshalb wurden ja mit
den neuen Delphi-Version zeichensatzkodierte Strings eingeführt, und genau
die kannst Du in Deiner Anwendung nicht brauchen.
> Nicht jetzt in dem aktuellen Projekt, aber bei anderen.
> Da werden dann binäre Daten mit einem Header versehen, also
> Startzeichen + Blocklänge + Daten + checksumme
Kenne ich, aber binäre Daten in einem String waren schon immer sozusagen
ein "Husarenstück", weil Strings dafür eben nie vorgesehen waren. Dein
aktuelles Delphi müßte aber dafür einen "Bytestring" als Typ bieten. Falls
Deine Sendefunktion einen solchen akzeptiert, wäre das wohl am geeignetsten.
...
> > (Neueres) Windows -> UTF16, d.h. "wide characters", also jedes Zeichen
> > _2_ (_zwei_) Bytes, für einfache ASCII-Zeichen 1 Byte ASCII-Code + 1
> > Byte #0.
>
> Ja, so sah das aus. Wenn man sich darauf verlassen kann, dass da immer 2
> Bytes stehen, könnte man damit ja leben...
Kann man bei UTF-16, aber sicherstellen, daß immer "wide characters" und
"wide strings" benutzt werden, ist trotzdem ratsam. Oder man kodiert halt
um auf ASCII/ANSI, wenn man sicher weiß, daß nur Ein-Byte-Zeichen vorkommen.
> > "writecom" nimmt als Parameter "char"? Offensichtlich...
>
> Nein, der Parameter ist ein String. Es wird aber auch ein Char
> akzeptiert. Delphi wandelt den wohl in einen String mit der Länge 1 um.
Ja. Wobei hier wohl "traditionell" Ein-Byte-Strings benutzt werden.
Daß da keine Meldung (mindestens eine Warnung) beim Kompilieren kam, ist
aber verwunderlich - oder wurde die unterdrückt bzw. ignoriert?
...
> > Nee, klar. Nur andere Ländereinstellung, Zeichensatzkodierung oder
> > sowas? Hat ja mit dem Compiler nix zu tun, ist ja nur das
> > Betriebssystem...
>
> Das ist eine meiner Fragen. Kann es sein, dass durch ein Windows-Update
> solche Sachen passieren?
Um's mal so zu sagen: es ist nicht grundsätzlich auszuschließen.
Unterschiedliche Zeichenkodierungen können evtl. sogar schon dadurch
zustande kommen, daß jemand anders mit anderer Spracheinstellung das
Programm benutzt (Deutsch (de) vs. Deutsch (ch) z.B.).
> Wie Delphi mit Strings umgeht solle doch Sache des Compilers sein.
Delphi geht mit den Strings halt so um, daß die Möglichkeiten des
Betriebssystems möglichst vollständig ausgenutzt werden können. Der
Compiler ist daran nur soweit beteiligt, wie er die Programmanweisungen in
Aufrufe des Run-Time-Systems umsetzt. Wie die Daten, die da als Parameter
übergeben werden, letztendlich verarbeitet werden, ist dann durch das
letztere definiert, da hat der Compiler nix mehr damit zu tun.