StringList als UTF-8-Datei speichern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: StringList als UTF-8-Datei speichern

Beitrag von gladio »

AnsiToUTF8 & Co. funktionieren nicht mehr

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;
 

Antworten