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


Groups > de.comp.lang.delphi.misc > #19084

Problem mit Chars in String

From stefan <adresse@ist.invalid>
Newsgroups de.comp.lang.delphi.misc
Subject Problem mit Chars in String
Date 2020-07-21 18:01 +0200
Organization solani.org
Message-ID <rf73hd$pnl$1@solani.org> (permalink)

Show all headers | View raw


Hallo,

ich hab jetzt kurz hintereinander bisher unbekannte Probleme mit Strings 
gehabt. Das erste war allerdings nicht Delphi sondern Lazarus.

Ich wollte einen String über die serielle Schnittstelle zu einem 
Etikettendrucker schicken. Dazu muss eine Kommandozeile zusammengesetzt 
werden, ungefähr so:

TEXT 100,100,1,1,90,0,"TestText"

Dieser Text steht in einer Textdatei die in ein Memo gelesen wird. Die 
Datei besteht aus mehreren Zeilen.

Auf die einzelnen Zeilen im Memo greife ich mit:

s := memo1.lines[i]

zu.

Dann übergebe ich den string s an eine Procedure, die das ganze dann an 
den Drucker sendet.

Soweit funktioniert das alles. Jetzt hat der Drucker aber keine Umlaute, 
jedenfalls nicht da wo sie sein sollten.

Ich hab den String dann umcodiert:

For i := 1 to length(s) do
  begin
   if s[i] = 'ä' then s[i] := #123;
   if s[i] = 'ö' then s[i] := #124;
   if s[i] = 'ü' then s[i] := #125;
   ... // ungefähr so,
  end;

Hat unter Delphi 7 funktioniert.

Unter Lazarus nicht. Da kommt vor jedem Umlaut ein Zeichen #195 und 
danach 186 o.ä.

Also jeder Umlaut wird im String durch 2 Bytes bzw. 2 Chars repräsentiert.

Also irgendwas mit Ansistring. Unter Turbo-Pascal war das alles noch 
viel schöner, da wusste man noch, wie ein String im Speicher abgelegt 
wird...

Also die Umkodierung entsprechend angepasst und die Character einzeln 
zum Drucker geschickt und es funktioniert.

{$H+} war eingestellt, {H-} hat nicht groß was geändert.

Jedenfalls konnte ich meine Umlaute drucken. Soweit ok, schien ein 
Problem von Lazarus zu sein.

Heute hatte ein Kollege ein ähnliches Problem, diesmal mit Delphi XE.

Zu einem Gerät sollte eine ESC-Sequenz geschickt werden, also:
<esc> 'OFF' + #13 + #10

also: s := #27 + 'OFF' + #13 + #10

Dann mit writecom(s) den String an die Schnittstellenroutine übergeben.

=> Ergebnis: Scheiße... Es kommt #27 + 'O' + #0 + 'F' + #0

Das zweite 'F' und #13+#10 werden verschluckt, statt dessen stehen da #0 
zwischen den einzelnen Bytes.

Wenn wir die Character einzeln senden, funktioniert es:

writecom(#27);
writecom('O');
writecom('F');
writecom('F');
writecom(#13);
writecom(#10);

Eine Programmversion, die vor 2 Wochen mit demselben Rechner compiliert 
wurde zeigt das Verhalten nicht. Der Kollege sagt, er habe nichts 
verändert, keine Compilerschalter gesetzt o.ä.

Die Komponente hab ich selbst vor 20 Jahren geschrieben, seitdem tausend 
mal eingesetzt und keine Probleme. Jetzt so ein curioses Verhalten.

Was mich wundert ist, dass die vor 2 Wochen compilierte Version das tut, 
was sie soll.

==> hat irgendjemand eine Erklärung?



















Back to de.comp.lang.delphi.misc | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Problem mit Chars in String stefan <adresse@ist.invalid> - 2020-07-21 18:01 +0200
  Re: Problem mit Chars in String Sieghard Schicktanz <Sieghard.Schicktanz@SchS.de> - 2020-07-21 21:52 +0200
    Re: Problem mit Chars in String stefan <adresse@ist.invalid> - 2020-07-22 07:13 +0200
      Re: Problem mit Chars in String Sieghard Schicktanz <Sieghard.Schicktanz@SchS.de> - 2020-07-22 23:06 +0200
  Re: Problem mit Chars in String "Michael Landenberger" <spamwirdgefiltert@web.de> - 2020-07-22 09:40 +0200
    Re: Problem mit Chars in String stefan <adresse@ist.invalid> - 2020-07-22 19:05 +0200

csiph-web