Umlaute aus Textdatei in TStringList

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Umlaute aus Textdatei in TStringList

Beitrag von KOBOLD Messring GmbH »

Um uns doch der "Mitte des Kreises" wieder zuzuwenden, und für uns arme Programmierer anwendbare Lösungen bereitzustellen:
Mich würde mal interessieren, wer eigentlich "echte" Probleme damit hat und wie die aussehen.
Ich habe extreme Probleme damit.
Wenn ich die Daten aus einer (UTF8- codierten) MySQL-DB direkt in einem DBGrid darstellen will, kann ich mich auf den Kopf stellen und Klimmzüge machen, ich kriege keine Sonderzeichen dargestellt. (Bei Linux nur ?-Zeichen, bei Windows wird die komplette Textzeile ignoriert, als wäre es ein leeres DB-Feld).
Wenn ich die SQLQuery "per Hand" durchgehe, jeden Datensatz mit der LongStringToWideString-Funktion z.B. in eine ListBox stelle, funktioniert es perfekt unter Linux, aber unter Windows werden nach-wie-vor alle Zeilen mit Sonderzeichen (und noch nicht mal alt-ägyptische, nur die normalen äöü und deren französichen und spanischen Brüder áóú) ausgeblendet.

¿Gibt es denn da nicht eine Abhilfe, eine Konvertierungs-Funktion, mit der man dieses Verhalten wieder gradebügeln kann?
¿Wodurch kommt denn der Unterschied Linux-Windows her, ist das nicht der gleiche zugrundeliegende FreePascal-Code?

Das sind echte Probleme für mich: Bislang konnte ich mich damit behelfen, da ich diese (eher administrativen) DB-Programme nur für mich (auf Linux-Arbeitsstation) benutzt habe. Jetzt will/muss ich aber eine Anwendung schreiben, die meine Kollegen auf Ihren Windows-XP-Arbeitsstationen brauchen, und da komm ich grad nicht weiter...
Dies sollte doch der "Kreismittelpunkt" eines Forums sein: Einer hat ein Problem, der andere hat die Lösung, oder im Laufe der Diskussion kommt man gemeinsam drauf...

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Umlaute aus Textdatei in TStringList

Beitrag von KOBOLD Messring GmbH »

Grade rausgefunden: Bei Windows muss man zusätzlich

Code: Alles auswählen

ListBox1.Items.Add (AnsiToUTF8(LongStringToWideString (SQLQuery1BEZEICHNUNG.AsString)));
ein AnsiToUTF8 einbauen, bei Linux geht's ohne.
Funktioniert auch im DBGrid, muss beim SQLQueryFIELDNAME.OnGetText rein:

Code: Alles auswählen

procedure TForm1.SQLQuery1BEZEICHNUNGGetText(Sender: TField; var aText: string; DisplayText: Boolean);
VAR s : String;
begin
  s := Sender.AsString;
  aText := AnsiToUTF8(LongStringToWideString (s));
end;
ABER nicht zu früh gefreut: Funktioniert mit Westeuropäischen Zeichen, wir haben aber auch Tschechisch, Slowakisch, Polnisch, da bleibt's bei den Fragezeichen (immerhin kommen einzelne Fragezeichen und keine komplett leeren Felder mehr). ¿Jemand weiss Abhilfe?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute aus Textdatei in TStringList

Beitrag von theo »

Ich kenne mich nicht aus mit den DB-Komponenten.
Vielleicht hilft das?
http://www.mail-archive.com/lazarus@laz ... 03387.html" onclick="window.open(this.href);return false;
http://bugs.freepascal.org/view.php?id=12414" onclick="window.open(this.href);return false;

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Umlaute aus Textdatei in TStringList

Beitrag von KOBOLD Messring GmbH »

Danke Theo,
der Hinweis aus der Mailinglist
http://lists.freepascal.org/lists/fpc-d ... 14949.html" onclick="window.open(this.href);return false;
hat's gebracht... meine Datenbank enthält nämlich nicht alle Spalten UTF8 :oops: , die tschechischen etc. sind CP1252 (kommen ja auch von meinem Chef :?
und dann kann man sich totkonvertieren und es kommt nichts vernünftiges bei raus:
deshalb so mit
aText := ConvertEncoding (s, 'cp1252', 'utf8');
aus der Unit LConvEncoding.
Die im Link angegebenen Parameter scheinen in der Lazarus-Komponente TMySQL50Connection nichts zu bringen, sind ja auch für Zeos gedacht.
Damit kann ich sagen, die Lazarus-DB-Komponenten sind besser als Ihr Ruf, man muss sie nur etwas anpassen.... und was nützt das schönste DB-Programm, wenn die DB-Daten-Grundlage Gülle ist... (aber da muss man erst mal draufkommen). Mögen anderen diese Irrwege erspart bleiben.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Umlaute aus Textdatei in TStringList

Beitrag von mschnell »

KOBOLD Messring GmbH hat geschrieben:meine Datenbank enthält nämlich nicht alle Spalten UTF8 :oops: , die tschechischen etc. sind CP1252
Arme Sau :( .

-Michael

Antworten