bl3nder hat folgendes geschrieben: |
In der Datenbanksoftware ist es bereits auf utf8 umgestellt. Wieso er es im qry browser trotzdem falsch anzeigt ist mir ein Raetsel.
Wie genau benutze ich oemtoansi oder oemtochar ?
Sowas bspw funktioniert nicht, weil ich von einem String lese, er aber ein pansichar will:
Grid.Cells[2,Grid.RowCount-2] := oemtoansi(SQLQuery.FieldByName('Benutzer').AsString);
oder gibts es sowas wie stringtoansi ? |
Hallo,
stringtoansi wäre kein Problem zu schreiben, aber wenn die Datenbank utf8 hat, ziehe ich meinen Vorschlag zurück: die ganze OemAnsi-Mimik ist veraltet, sie diente zur Umsetzung verschiedener 256-Byte-Zeichensätze wie ISO8859 und eben Windows (Latin1). UTF8 ist dagegen eine verkürzte Darstellung von Unicode. Generell ist OEM die Vergangenheit, Unicode ist die Zukunft (in der Gegenwart funktioniert beides nicht so einfach).
Für die Umsetzung gibt es in Win32 die Funktion MultiByteToWideChar. Es gibt zwar in Delphi den Stringtyp WideChar, aber VCL usw. sind keineswegs Unicodefähig. Du müsstest also nochmal WideChar to AnsiString konvertieren (und ev. Fehler berücksichtigen). Umgekehrt dann alles rückwärts.
Es ist natürlich zweckmässig, so etwas zentral einzubauen. Für Oem ist z.B. bei ODBC-Treibern für DBase ein Häkchen zu setzen, dann braucht man sich darum nicht mehr kümmern, ähnlich hat TCustomEdit in Delphi eine Eigenschaft OEMConvert und wandelt dann alles selbst um. Das wird aber meiner Meinung nach für UTF8 nichts nützen.
Win32 kennt keine Strings, man muss daher immer zwischen array of char/PChar und Strings hin- und her kopieren oder wandeln, aber das wird zur Routine. Man sollte immer die Windows-Umwandlungen benutzen, weil diese sich automatisch nach den lokalen Einstellungen richten.
Gruss Reinhard
Nachtrag: das alles funktioniert sowieso nur, wenn Unicode-Fähige Schriften installiert sind - vielleicht hilft ja das schon weiter, insbesondere bei Fremdsoftware wie einem Dateibrowser.