![]() |
Umlaute // Lazarus 1.4.2 mit Datenbank
Hallo zusammen
Ich habe ein Problem mit einer Datenbankanwendung. Alle Umlaute und div. Sonderzeichen éàè werden mit Fragezeichen oder falschen Symbolen dargestellt. Auf die Datenbank wird schon mittels einer Delphi-Anwendung erfolgreich zugegriffen. In Delphi werden mit der gleichen Komponente die Umlaute korrekt dargestellt. Ich verwende die DataAbstract komponenten für den Zugriff auf eine MySQL Datenbank. ![]() Ich habe schon sehr viel darüber gelesen: ![]() ![]() Allerdings wird immer wieder geschrieben das ich z.B. dies machen kann:
Delphi-Quellcode:
Bei meiner Datenbank Anwendung setzt ich DBEdit Felder ein die in sehr grosser Zahl vorhanden sind ein... Wie könnte ich das Zentral lösen.
var
MyString: string; // ansi encoded begin MyString := SomeRTLRoutine; MyTEdit.Text := AnsiToUTF8(MyString); end; |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Erste Frage: Welche Zeichenkodierung wird genutzt? Zweite Frage: Welcher Font wird genutzt? Gruß K-H |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Dritte Frage: welche Zugriffs-Komponenten?
Vierte Frage: welche MySql-Version? |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
>> K-H
Zitat:
Zitat:
Zitat:
>> TraumTaenzerDieter Zitat:
Zitat:
|
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Es gibt einige Fonts, die sind Über die US-ASCII-Zeichen nie hinaus gekommen. Ebenfalls ein guter Ansatz, welche (Byte)Werte sollen angezeigt werden? Wenn die in Ordnung sind, kann man sich Frage 3 und 4 und die nach dem DB Zeichensatz sparen. Gruß K-H |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Fragezeichen und falsche Symbole deuten darauf hin das in der gewählten Kombination noch ein UTF8-Wandlungsproblem (Zu Viel/Zu wenig/Falscher Stringtyp) vorliegt. MySQL hat AFAIK ab V4 keine Probleme mehr mit Unicode. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
[QUOTE=p80286;1315981]
Zitat:
Segoe UI Ist mir nicht klar wo dieser angepasst werden könnte... Zitat:
Also dargestellt werden könne sollte eingentlich Europäische Zeichen: Alle Umlaute und div. Sonderzeichen éàèçöäü |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Habe eben noch einen Test gemacht.
Wenn ich folgende Werte in Der Lazarus Anwendung eingebe: Test öäü éàèç Werden diese in MySQL wie folgt gespeichert: Test öäü éÃ*èç In Der Lazarus-Anwendung erscheinen sie aber korrekt als Test öäü éàèç. Edit: Mit einem Online UTF8 decoder erhalte ich wieder die richtigen Zeichen... Wo könnte dies generell umgestellt werden.. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
![]() Der nächste Schritt ist dann UTF16 bei dem jedes Zeichen durch zwei Byte bzw. ein Word (oder ein mehrfaches falls nötig)repräsentiert wird. Zeichen (dargestellt oder nicht) sind nur die Interpretation von Werten. Im Zweifel kommst Du an einem Hex-Editor nicht vorbei. Gruß K-H |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
|
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Habe das ganze auch schon mal mit dem Dev. Team vom RemObjects angeschaut. Sie meinten es wäre ein Problem in Lazarus selber... ![]() Hoffe wirklich das ich das irgendwie zum laufen kriege... Bin zu Lazarus "gezogen" da mir Delphi für meine zwecke ein wenig teuer wurde....Nicht kommerzieller Einsatz ( Was nicht heisst das es das nicht wert ist... Möchte keine Diskussion vom Zaun brechen :pale:) |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
lazarus selbst hat ganz sicher kein Problem mit UTF8, das kann ich sehr sicher sagen und im Zusammenspiel mit Firebird und Anbindung über die serienmäßigen SQLDB Komponenten gilt das auch für diese Kombination. Auch Tests mit sehr exotischen Inhalten sind da sowohl in Blob und varchar Felder korrekt gespeichert und im TEdit oder TMemo auch 100% sauber dargestellt.
Ich hatte aber mal Versuche mit den devart Komponenten für lazarus gemacht, und auch da gab es seltsame Doppelcodierungen bei Blobs, d.h. ein Euro Zeichen zum Beispiel wurde beim speichern erst mal in den 3 Byte langen code übersetzt und die daraus resultierenden Zeichen wurden vor dem Eintrag in die DB noch mal codiert, so das am Ende 9 Byte in der DB standen. Beim Auslesen hat die devart Komponente immerhin den gleichen Mist wieder umgekehrt doppelt dekodiert udn das richtige angezeigt. In allen anderen Programmen wie zum Beispiel IBExpert stand in der DB dann aber nur Müll. Ich bin dann schnell wieder zurück zu SQL DB und hab seitdem auch nie wieder andere Komponenten gebraucht, was auch deshalb praktisch ist, weil die SQLDB in jeder Lazarus Version auf jeder Plattform enthalten ist. Ich würde also bei deiner Kombination auch mal die benutzte DB Komponente hinterfragen |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Danke für Deine wirklich sehr ausführliche und sicher kompetente Antwort. Die RemObjects Komponenten sind einfach sehr praktisch....
Werde beim Support nochmals nachfragen. Ich habe da halt ein wenig Ein Problem wenn der Support mir mitteilt das dies an Lazarus liegt und sie da nichts machen können.. (siehe link im letzten Post) Shalom Manfred |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Dem würde ich einfach mal in einem Beispiel auf Basis der SQLDB Komponenten widersprechen, in dem du deine MySQL Datenbank mit UTF8 Daten ansteuerst, was sicherlich auch fehlerfrei sein wird. Die Aussage, daß das an Lazarus liegen würde, wäre damit widerlegt. Es liegt ziemlich sicher an den benutzten Komponenten oder an dem Unverständnis des Architekten dahinter für die Lazarus Architektur.
|
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Shalom Manfred |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Kleines Feedback.
Der Support ist nun das ganze am überprüfen. ![]() Das Problem ist momentan das die Komponente unter Lazarus eine andere Ausgabe ergibt als unter Delphi. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Hallo!
Versuch doch mal in der dpr-Datei (Lazarus-Projektdatei) direkt nach dem "Threat-Gedöns" folgendes einzugeben: {$IFDEF UNIX}cwstring,{$ENDIF} (Habe ich aus dem Lazarus-Forum, bei dem es darum ging, dass Umlaute unter Windows/Linux Probleme gemacht haben. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Halo Thomas
Habe die .lpr Projektdatei wie folgt angepasst: vorher:
Delphi-Quellcode:
neu:
uses
{$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF}
Delphi-Quellcode:
Leider ohne Erfolg
uses
{$IFDEF UNIX}{$IFDEF UseCThreads} cthreads,cwstring, {$ENDIF}{$ENDIF} |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Versuch es mal so:
Delphi-Quellcode:
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads, {$ENDIF}{$ENDIF} {$IFDEF UNIX}cwstring, {$ENDIF} |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Leider auch kein Erfolg..
|
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Hallo zusammen
Wollte Euch nur ein kleines Update über den Stand der Dinge geben: Leider bis jetzt noch keinen Erfolg. Der Support hat aber ein Problem im FPC gefunden: Zitat:
Delphi-Quellcode:
Hier gehts im Support Forum weiter:
procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
aToNative: Boolean); // There seems to be no WStrCopy defined, this is a copy of // the generic StrCopy function, adapted for WideChar. Function WStrCopy(Dest, Source:PWideChar): PWideChar; var counter : SizeInt; Begin counter := 0; while Source[counter] <> #0 do begin [B]Dest[counter] := char(Source[counter]); //<<< here should be WideChar instead of char , so it loses all unicode chars[/B] Inc(counter); end; { terminate the string } Dest[counter] := #0; WStrCopy := Dest; end; ![]() Shalom Manfred |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Liste der Anhänge anzeigen (Anzahl: 1)
Es wird aber auch durch mehrfache Wiederholung von denen nicht richtiger, das die denken, das da Fehler in Lazarus sind. Wahrscheinlich ist da ein Fehler in der zusammenarbeit zwischen deren Komponenten und der Lazarus Funktionsweise, aber das ist dann ganz wo anders zu beheben als irgendwo an den fpc sourcen was zu patchen. Wäre jedenfalls meine Sicht der Dinge.
Siehe Anhang: ist enfach mal UTF8 Inhalt von ![]() in unser ERP System eingefügt und das wird sowohl in BRP (geschrieben mit Lazarus) als auch in IBExpert (geschrieben mit Delphi) korrekt dargestellt. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Hier das neueste Update:
Sieht im Moment nicht so gut aus...:pale: Zitat:
Delphi-Quellcode:
procedure TForm1.tbl_test31144_utf8WSTRGetText(Sender: TDACustomField;
var Text: string; DisplayText: boolean); begin if Sender.DataType = datWideString then Text := UTF8Encode(Sender.asWideString); end; Zitat:
|
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Trotzdem sollte eine Bibliothek die man (kostenpflichtig? Kauft) schon alle Eigenheiten des Unterstützen System berücksichtigen und nicht sagen: "Wir machen es in allen Systemen anders, also passt ihr euch an". |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
![]() "UTF-8 is the dominant character encoding for the World Wide Web, accounting for 85.1% of all Web pages in September 2015" UTF16 ist durch Windows weit verbreitet, wer sich aber mal eine typische Textdatei im Hex Editor anschaut, sieht sofort die Nachteile von UTF16, denn wie der Name schon beeinhaltet, ist für jedes Zeichen immer mindestens 2 Byte Platz erforderlich, auch wenn da nur Ascii Zeichen wie A-Z und 0-9 drin stehen. Das betrifft im westeuropäischen Sprachraum sicherlich den Großteil aller Daten. Die Dateien sind daher bei gleichem Inhalt fast doppelt so groß. Und für den restlichen Bereich (Asien etc) sind die meisten Zeichen 4 Byte lang. Daher ist UTF8 im Sinne von Übertragung und Speicherung meistens ökonomischer. Das ist zwar eigentlich Haarspalterei, aber UTF8 ist keineswegs ungewöhnlich. Zitat:
Wenn man also als Komponentenhersteller die Komponenten aus reinem Opportunismus auf dieser Plattform "benutzbar" macht, in dem es sich kompilieren lässt und für einige der unterstützten Plattformen bzw Charsets auch benutzen lässt, dann sollten die den potentitellen Käufer doch drauf hinweisen. Wenn manfred_h der erste ist, der das gemerkt hat und man erst Tage später nach intensiven Nachhaken eine unbefriedigende Erklärung dazu geben kann, ist das im Sinne einer Produkthaftung sicherlich Grund genug, das Geld zurückfordern zu können. Ich gehe nämich auch davon aus, das beim Schreiben SetText ebenso behandelt werden müsste und spätestens jetzt macht die Komponente mehr Arbeit als man dadurch einspart, im Vergleich zu den eingebauten SQL DB Komponenten. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
AFAIK hat aber auch OSX UTF16 als die primäre/bevorzugte Codierung und auch Android (wegen starker Java-Wurzeln) wird UTF16 haben. Und dann ist es von vorteil wenn auch die eigene Sprache UTF16 verwendet damit bei jedem API aufruf gewandelt werden muss. Vor einiger Zeit habe ich Lazarus getestet und dort war es nicht möglich (oder nur sehr umständlich) alle File-Funktionen mit Dateien mit Sonderzeichen zu nutzen. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
In 2015 sehe ich das als Krücke an. Empfiehlt der Komponentenhersteller das, wäre das für mich ein Argument nach Alternativen zu suchen. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Danke für Eure Antworten.
Für mich war RemObjects eine gute Idee, weil ich eine Komponente suchte, mit der ich eine Verbindung auf einen zentralen MySQL Server realisieren kann, ohne dass dieser direkt ansprechbar ist. RemObject hat für dies eine html Schnittstelle, die dies übernimmt. Die Benutzerverwaltung konnte auch schön mit einem LDAP-Server realisiert werden. Momentan bin ich mir nicht sicher, wie ich weitergehen soll... Lazarus habe ich ausgesucht, da dies sehr ähnlich wie Delphi ist. Von Delphi wollte ich aus Kostengründen "weg". Nichts generell gegen Delphi. :wink: Habe mich auch schon ( die letzten Tage ) mit dem Gedanken beschäftigt, ob Visual Studio eine Option wäre.... Lazarus hat mich auch begeistert, da ich eine Codebasis für Windows / OS X / Linux hatte. Shalom Manfred PS: Der Support von RemObject war immer sehr gut Erreichbar und hat eigentlich immer gute Lösungsvorschläge unterbreitet. Wollte dies nur kommunizieren, da ich kein schlechtes Licht auf den Support werfen möchte. Das aktuelle Problem ist aber trotzdem sehr ärgerlich... |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Zitat:
Ergänzend nutzen wir in anderen Projekten einen 30 Zeiler in php, mit dem wir dann (in dem Falle aber mit Firebird) via http bzw https request sql abfragen an einen apache webserver senden und der uns dann die resultate in einem csv format zurücksendet (Der Rest ist in einer Firebird SP realisiert). Leider ist in deiner Aussage aber schon das größte Problem vieler Delphi Programmierer enthalten: man sucht nach einer Komponente! Die macht dann oft ganz viele tolle Dinge, aber das eigentliche Problem wäre oft ohne Komponente viel einfacher umzusetzen. Remobjects gehört sicherlich neben devexpress und tms zu den besten Herstellern, die noch im Delphi Markt existieren, aber man sollte immer die Alternative Do it yourself im Auge behalten, ist oft weniger schwierig als man denkt. |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Hallo zusammen
Gute neuigkeiten von remobjects:thumb:. Das ganze wurde als Bug eingestuft wird behoben. Zitat:
Manfred |
AW: Umlaute // Lazarus 1.4.2 mit Datenbank
Hallo zusammen
Wollte Euch nur Informieren das mit der allerneuesten Beta das Problem behoben ist: > RemObjects Data Abstract for Delphi - 9.0.94.1193.exe [Branch: beta] — Fri, Oct 30, 2015 ( Es gab heute 2.11.2015 ) noch eine kleine Korrektur. :-D:thumb: Shalom Manfred @IBExpert: Danke auch nochmal für Deine guten Einwände.:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz