Ich hänge mich mal hier an, da ich vor ein paar Tagen Probleme mit UTF8-Umwandlung hatte.
Vor etwas mehr als 2 Jahren habe ich ein kleines Lazarus-Programm entwickelt in dem aus einer Access-Datenbank Namen in eine
Combobox eingelesen werden sollen:
Code: Alles auswählen
SQLQuery.First;
while not SQLQuery.EOF do
begin
Combobox1.Items.Add((SQLQueryName.Value));
SQLQuery.Next;
end;
Funktioniert, nur Namen mit Umlauten enthalten ein Fragezeichen.
Etwas gesucht, probiert und gefunden:
Code: Alles auswählen
Combobox1.Items.Add(AnsiToUTF8(SQLQueryName.AsString));
Alles toll.
Das Ganze passierte unter Windows mit Lazarus 1.2x oder 1.4x und FPC 2.x
Nun wollte ich das Programm mal etwas überarbeiten und neu compilieren und siehe da: die Fragezeichen waren wieder da!
Meine erste Überlegeung, ich habe einen alten Quellcode verwendet und der letzte Originale ist verloren - Panik.
Gesucht, probiert, alle Varianten AnsiToUTF8, SysToUTF8, UTF8Encode und alles auch mal umgekert.
Keine Lösung, keine Fehlermeldung.
Das passierte nun mit Lazarus 1.6 und FPC3.x
Hier bin ich fündig geworden und konnte das Problem lösen:
http://wiki.freepascal.org/Better_Unico ... in_Lazarus
UTF8Decode, UTF8Encode - Almost all can be removed.
UTF8ToAnsi, AnsiToUTF8 - Almost all can be removed.
UTF8ToSys, SysToUTF8 - All can be removed. They are now dummy no-ops and only return their parameter.
Meine konkrete funktionierende Lösung ist nun
Code: Alles auswählen
SQLQuery.First;
while not SQLQuery.EOF do
begin
Combobox1.Items.Add(WinCPToUTF8(SQLQueryName.AsString));
SQLQuery.Next;
end;