Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   IBX/UIB : Firebird mit Characterset ISO8859_1 und das Eurozeichen in Unicode-Delphi (https://www.delphipraxis.net/164817-ibx-uib-firebird-mit-characterset-iso8859_1-und-das-eurozeichen-unicode-delphi.html)

squetk 1. Dez 2011 02:21

Datenbank: FireBird • Version: 2.1 • Zugriff über: IBX und UIB

IBX/UIB : Firebird mit Characterset ISO8859_1 und das Eurozeichen in Unicode-Delphi
 
Hallo,

ich habe folgendes Problem:
Beim Zugriff auf eine Firebird-Datenbank mit dem Zeichensatz ISO8859_1 wird das Eurozeichen mit Delphi-XE-Compilaten (XE2 ebenso) aus Textdatenfeldern nicht ausgelesen.
Das ist mit den Datenzugriffskomponenten IBX und UIB der Fall.
Ursache bei beiden ist die Verwendung der API-Funktion MultiByteToWideChar mit Übergabe der Codepage 28591.
Diese Funktion konvertiert den Wert $80 nicht in den korrekten Wert #$20AC für das Eurozeichen im Unicode sondern macht #$0080 daraus (mit einer Null als Parameter "Codepage" klappt es).

Mir stellt sich jetzt die Frage, wie man das Problem lösen kann :?

Die Datenbank auf Unicode umstellen?
Die Datenzugriffskomponenten anpassen?

Oder kennt jemand eine einfachere Lösung?

Vorschläge àla "EUR" statt dem Eurozeichen helfen nicht, weil der Kunde nun mal das Eurozeichen in Notizen oder Bemerkungen oder dergleichen eintragen möchte.

mjustin 1. Dez 2011 09:30

AW: IBX/UIB : Firebird mit Characterset ISO8859_1 und das Eurozeichen in Unicode-Delp
 
Zitat:

Zitat von squetk (Beitrag 1138712)
Beim Zugriff auf eine Firebird-Datenbank mit dem Zeichensatz ISO8859_1 wird das Eurozeichen mit Delphi-XE-Compilaten (XE2 ebenso) aus Textdatenfeldern nicht ausgelesen.

Ursache ist: das Eurozeichen ist in ISO 8859-1 nicht enthalten (siehe http://de.wikipedia.org/wiki/ISO_8859-1).

Als Alternative zur Unicode-Umstellung ist eine Änderung des Zeichensatzes auf ISO 8859-15 (oder eventuell Windows 1252) möglich - diese enthalten das Eurozeichen und weitere Sonderzeichen westeuropäischer Sprachen.

Die einschlägigen Sicherheitsmaßnahmen sollten natürlich getroffen werden (z.B. ein vorheriger ausgiebiger Test der Umstellung in einer Testdatenbank...)

squetk 1. Dez 2011 13:08

AW: IBX/UIB : Firebird mit Characterset ISO8859_1 und das Eurozeichen in Unicode-Delp
 
Ok, das erklärt, warum die Codierung fehlschlägt.
Unter Delphi 2009 und IBX funktioniert es übrigens, weil dort die Codepage einfach nicht unterstützt wird.
Also ein Bug, der zu einem korrekten Ergebnis führt.

Schade, ich hatte gehofft, dass es eventuell einen simplen Trick gibt, das Problem zu umschiffen.


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