Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TnTlabel + Zeos + Firebird Encoding Probleme (https://www.delphipraxis.net/176743-tntlabel-zeos-firebird-encoding-probleme.html)

PhilmacFLy 24. Sep 2013 09:38

Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos 7.0.5

TnTlabel + Zeos + Firebird Encoding Probleme
 
Moin

Nachdem ich jetzt mein Projekt in Delphi 2007 mit Zeos 7.0.5 hab, dachte ich eigentlich das das mit den kyrillischen Zeichen aus der Datenbank kein Problem mehr sein sollte. Jetzt liefert mir aber meine kleine Testanwendung die ich mir geschrieben hab trotzdem nur Kauderwelsch.
Delphi-Quellcode:
Zconnection1.Connect;
ZQuery1.SQL.Text := 'Select * From Test Where ID = 2';
Zquery1.Open;
tntlabel1.Caption := Zquery1.FieldByName('text').AsWidestring;
tntedit1.Text := Zquery1.FieldByName('text').AsWidestring;
label1.Caption := Utf8toAnsi(Zquery1.FieldByName('text').Asstring);
edit1.Text := Utf8toAnsi(Zquery1.FieldByName('text').Asstring);
Zquery1.close;
Wenn ich jetzt z.B. "Türöffner" auslesen will kommt für die Tntcomponenten: türöffner für die normalen funktionierts logischer weise, wenn ich фывафыва aus der Datenbank lesen will krieg ich bei TnT фывафыва für die normalen aber nur ????????.
Edit: Auf dem russischen Windows wird dann wieder фывафыва draus.

In der ZConnection hab ich die Clientcodepage auf UTF8 und die Controlscodepage auf cCP_UTF8 eingestellt.
Das Feld das ich auslese ist: Charset UTF8 und Coallate UTF8.

Im IBExpert wird alles korrekt dargestellt.

Jetzt ist natürlich die Frage wo liegt das Problem?

EgonHugeist 25. Sep 2013 20:35

AW: TnTlabel + Zeos + Firebird Encoding Probleme
 
Soweit mir bekannt, erwarten die TNT-Controls WideString-Fields.

Somit müßtest du die ControlsCodePage auf cCP_UTf16 stellen. Dann konvertiert Zeos alles auf WideStrings/UnicodeStrings.

Für mich sind die dir gelieferten Daten völlig korrekt. Es gab/gibt da irgendwo im Zeos-Forum einen D7-hack für die TNT controls, da D7 keine TWideString/TWideMemo-Fields unterstützt und via UTF8Encode/UTF8Decode die Daten lädt. Weiterhin ist die ControlsCodePage cCP_UTF8 auch für alle Lazarus Anwender, da unter LCL alle controls von UTF8-encodierten Strings ausgehen.

Solltest du rein mit heimischer CodePage arbeiten, wäre cGet_ACP effizienter.

Bei weiteren Problem, müßte ich auch den default-Charset deiner FierBird DB wissen..

Edit: ZConnection.AutoEncodeStrings?

Bernhard Geyer 25. Sep 2013 21:05

AW: TnTlabel + Zeos + Firebird Encoding Probleme
 
Zitat:

Zitat von EgonHugeist (Beitrag 1229931)
Soweit mir bekannt, erwarten die TNT-Controls WideString-Fields.

Wenn mich nicht alles täuscht erwarten hier die TNT's (Konfigurierbar über Properties) UTF8-Strings.

EgonHugeist 26. Sep 2013 10:26

AW: TnTlabel + Zeos + Firebird Encoding Probleme
 
Das weiß ich nicht, Bernhard.

Habe mich gestern noch um das D2005 Problem gekümmert. Sollte jetzt wunderbar kompilieren. 7.0.6 kommt noch diese Woche, da 7.0.5 ein unschönes Memory-leak hat.


Tja, um hiermer zu sagen, müßte ich mehr Informationen haben. Default Charset der DB ist AutoEncodeStrings gesetzt oder nicht? Wie funzen nun die TNT-Controls genau? D2005 unterstützt auch nich keine TWide..-Fields. Scheint alles erst mit dem TWideDataSet seit D2006 dabei zu sein. Bug-Tracking ohne verfügbare Compiler ist etwas frustrierend..

PhilmacFLy 26. Sep 2013 12:00

AW: TnTlabel + Zeos + Firebird Encoding Probleme
 
Zitat:

Zitat von EgonHugeist (Beitrag 1229931)
Soweit mir bekannt, erwarten die TNT-Controls WideString-Fields.

Somit müßtest du die ControlsCodePage auf cCP_UTf16 stellen. Dann konvertiert Zeos alles auf WideStrings/UnicodeStrings.

Danke das wars!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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