Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Umlaute aus GUI verarbeiten (https://www.delphipraxis.net/172391-umlaute-aus-gui-verarbeiten.html)

dummzeuch 31. Dez 2012 11:37

Umlaute aus GUI verarbeiten
 
Hi,

Eigentlich wollte ich Lazarus "mal eben" ausprobieren und habe ein simples Buchstabier-Programm, das ich in Delphi geschrieben habe, von Lazarus konvertieren lassen.

Mit einer einzigen kleinen Aenderungen compilierte es dann und macht auch fast, was es soll. Es kommt nur mit Umlauten in der Eingabe nicht klar.

folgender Code:

Code:
procedure TForm1.Edit1(Sender: TObject);
var
  s: string;
  i: integer;
  c: char;
begin
  s := Edit1.Text;
  for i := 1 to Length(s) do begin
    c := s[i];
    doSomething(c);
  end;
end;
Macht komische Dinge, wenn ich Umlaute eingebe, die Laenge ist dann jeweils um 1 groesser als erwartet und statt des Umlauts erhalte ich zwei Zeichen.

Meine Vermutung: UTF-8 Kodierung.

Aber wie bekomme ich jetzt aus dem String die korrekten Zeichen heraus? 'Gräfin' soll 6 Zeichen haben, nicht 7 und das 3. Zeichen soll ein 'ä' sein (und das 4. ein 'f').

In Delphi passiert das automatisch. Was muss ich in Lazarus machen?

twm

mkinzler 31. Dez 2012 11:46

AW: Umlaute aus GUI verarbeiten
 
Ve´rsuch es mal als AnsiString

Bernhard Geyer 31. Dez 2012 11:48

AW: Umlaute aus GUI verarbeiten
 
Zitat:

Zitat von dummzeuch (Beitrag 1197228)
Macht komische Dinge, wenn ich Umlaute eingebe, die Laenge ist dann jeweils um 1 groesser als erwartet und statt des Umlauts erhalte ich zwei Zeichen.

Meine Vermutung: UTF-8 Kodierung.

Korrekt. Bei Lazarus hat man m. E. Falsch auf UTF-8 statt UTF-16. So hat man in einem Programm tausende Stellen bei denen man mit der Codierung aufpassen muss. Ebenfalls dürfte es noch tausende Stellen in der Bibliothek geben die mit ASCII statt UTF-8 arbeiten (es tauchen ja regelmäßig Fragestellungen hier auf die genau dieses Problem haben.

dummzeuch 31. Dez 2012 15:04

AW: Umlaute aus GUI verarbeiten
 
Iiih, ist das gruselig: Man muss beim Einlesen von UTF8 nach ANSI wandeln und bei der Ausgabe wieder von ANSI nach UTF8.

Jetzt funktioniert's.

Falls sich jemand das ansehen moechte (compiliert mit Lazarus und Delphi XE2):
dzBuchstaBier SVN auf Sourceforge

Naja, jetzt weiss ich zumindest schonmal, dass Lazarus fuer die Arbeit erstmal keine Alternative ist.

Danke fuer die Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz