Zeichensatz-Verwirrung

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Zeichensatz-Verwirrung

Beitrag von Martin V »

Hallo,

nach einigen Anlaufschwierigkeiten meinte ich, bei den Fpc/Lcl Zeichensätzen durchzublicken:

- innerhalb der LCL ist der Zeichensatz UTF8
- die Pascal-Quelltexte werden in UTF8 abgespeichert
- "sys" bei "sysToUTF8" etc. ist bei Windows der Ansi-Zeichensatz (üblicherweise 1252)

D.h. übergibt man einen String, der aus der fpc kommt, an einen z.B. Label, muß man nach UTF8 konvertieren und umgekehrt.

Soweit OK. Wenn man eine Datei öffnen will mit assign, dann gilt der Ansi-Zeichensatz.

Ich habe nun festgestellt, daß jedoch sysutils.findfirst bei Windows nicht den Ansi, sondern den OEM (IBM) Zeichensatz verlangt (437 bzw. 850). Jetzt bin ich restlos verwirrt. Die einen Dateifunktionen verlangen ANSI, andere OEM. Wer kann mir das erklären? Bei Mac und Linux wird sicher nicht der OEM Zeichensatz verwendet. Wie mache ich dann "compile everywhere"? Oder ist das ein Fehler in der FPC-Library?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Zeichensatz-Verwirrung

Beitrag von Christian »

Das hat mit der FPC Library nichts zu tun. "compile everywhere" ist nicht der fpc sloagan sondern der Lazarus sloagan. In der Unit FileUtil gibt ein FindFirstUTF8 FindNextUTF8 u.s.w. bei dennen wird die Konvertierung korrekt durchgeführt und du brauchst dir keine Gedanken mehr drum zu machen. Um die Hintergründe noch etwas zu erklären. Die FC RTL versucht eine Mischung zwischen nah am System und portabel. Deswegen wird dort die FindFirst Routine nur zur Windows Routine gemappt und die WinAPI ist nicht sonderlich sauber und strukturiert ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Re: Zeichensatz-Verwirrung

Beitrag von Martin V »

Danke für den Tipp mit fileutil.findfirstUtf8. Wie ist aber dann assign (file, filename) zu sehen? Ist das über alle Plattformen dann ANSI-Codepage ?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Zeichensatz-Verwirrung

Beitrag von Christian »

AssignFile(UTF8ToSys(Editx.text))
Ich würd auch die alten Pascalroutinen nicht mehr verwenden TFileStream machts einem oft einfacher auf Dateien zuzugreifen.
Ist aber sort das Selbe TFileStream.Create(UTF8ToSys(Editx.Text),fmOpenRead);
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten