Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich bin grade dabei die nächste offene Beta für "Phase 2" zu finalisieren, und wollte u.a. auch ein Problem in der Darstellung von Umlauten unter Linux beheben, hab aber bisher noch keinen Anhaltspunkt gefunden der mich weiterbringt.
Sprich alle Umlaute werden falsch dargestellt. Die Strings kommen alle aus XML-Dateien die UTF-8 kodiert sind und unter Linux mit der XML-Implementation von FPC geladen werden. Interessanterweise sieht dass auch genauso aus wenn ich aus UTF-8 z.B. ISO-5598-1 mache. Die ganzen UTF-Funktionen (UTF8Decode, UTF8ToAnsi, etc.) hab ich schon ausprobiert. Wenn ich mir einen solchen String z.B. in einer Messagebox anzeigen lasse wird er übrigens korrekt dargestellt.
Jemand ne Idee? Gibt hier ja sicherlich den ein oder anderen der ne OpenGL-Anwendung mit Lazarus unter Linux laufen hat.
//edit: erstmal das bild als link reingepackt ~ Horazont
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ganz normale Texturenfonts, zum Rendern wird dann einfach nur ein glCallList mit dem Text gemacht. Und da die unter Windows problemlos funzen nehme ich an dass hier unter Lazarus / Linux für Umlaute und Co. falsche Zeichen reingereicht werden.
Edit : Die Umlaute werden zwar z.B. in einer Messagebox korrekt angezeigt, aber Ü ist nicht gleich Ü. Sprich ein "if Name = 'Übermerika then..." tut nicht. Ich glaub hier verhält sich Linux grundlegend anders als Windows. Hat hier sonst jemand schonmal Texturenfonts mit Umlauten unter Linux gerendert? So render ich die seit Jahren problemlos unter Windows :
Ein UTF8Decode an der Stelle bringt mir übrigens die richtigen Umlaute, nur mit Codepages zwischen den Zeichen. Ich scheine aber auf dem richtigen Weg zu sein
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Kannst du bitte das Bild kleiner machen (800× für inline images)? Antworten ist hier nen krampf, weil ich beim tippen nach rechts scrollen muss.
Ansonsten ist des Problem relativ klar. Lazarus verwendet weitgehend UTF8, weil die ganzen Backends UTF8 verwenden (und UTF8 einfach am sinnvollsten ist). Wenn deine Sourcedateien aber nicht UTF8-Kodiert sind, können natürlich bei so einem If-Vergleich lustige sachen passieren . FreePascal hat leider keinen ordentlichen Unicode-Support (nicht so ordentlich wie z.B. der von Python), dann wäre das Problem nicht vorhanden.
So jedenfalls musst du deinen UTF8-String irgendwie in Latin1 umwandeln… UTF8Decode macht nicht das was du willst, kannst du mal genauer sagen, was dabei rauskommt?
grüße
(Breite korrigiert)
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
sollte hier zwar irrelevant sein, aber bei Buchstaben mit Akzenten gibt es idR mehrere Codierungen. das ü zB gibt es als einzelnes Zeichen oder als u mit ̈. Ist natürlich nicht beides das gleiche, nicht einmal gleich viele Zeichen.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Ein UTF8Decode an der Stelle bringt mir übrigens die richtigen Umlaute, nur mit Codepages zwischen den Zeichen. Ich scheine aber auf dem richtigen Weg zu sein
UTF8Decode liefert laut FPC-Beschreibung einen WideString. Man Kann glCallLists statt mit GL_UNSIGNED_BYTE auch mit GL_UNSIGNED_SHORT aufrufen:
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
sharkman hat geschrieben:
Zitat:
aber Ü ist nicht gleich Ü
sollte hier zwar irrelevant sein, aber bei Buchstaben mit Akzenten gibt es idR mehrere Codierungen. das ü zB gibt es als einzelnes Zeichen oder als u mit ̈. Ist natürlich nicht beides das gleiche, nicht einmal gleich viele Zeichen.
Das ist es, was ich mit ordentlichem Unicodesupport meine. Normalisierung gehört dazu (also solche dinge auf ein einheitliches Schema runterbrechen), sonst kann man Vergleiche sofort vergessen.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.