Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

Moin,

ich beginne gerade ein neues Projekt. Im wesentlichen geht es um das Einlesen, manipulieren und ausgeben von Textdateien im csv Format. Ja und wie das so ist in Deutschland, sind diese Texte voller Umlaute. Da ich dieses Programm neu erstelle, muss ich auf nichts Rücksicht nehmen. Gibt es eine globale Einstellung um UTF-8 kompatibel zu sein? Darf ich nur bestimmte String Befehle nutzen?
Ich freue mich über jede Anregung.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Mathias »

Gibt es eine globale Einstellung um UTF-8 kompatibel zu sein?
Lazarus arbeitet von Haus auf mit UTF8.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von wp_xyz »

Sind denn die CSV-Dateien als UTF8 kodiert? Öffne sie mit NotePad++. Rechts unten in der Statuszeile steht, wie sie codiert sind. Wenn die Dateien nicht UTF8-kodiert sind, musst du sie, je nach Code-Page umkodieren, um sie von dem Lazarus-Controls richtig anzeigen zu lassen. Dazu gibt es eine Menge Routinen in der Unit LConvEncoding.

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

Dann mache ich etwas anderes falsch.

Ich speichere eine Exceldatei ins ".csv" Format.

Meine mit Lazarus 1.8 erstellte Anwendung öffnet diese Datei mit AssignFile und schreibe die einzelnen Werte in ein "array of Widestring". Dann bearbeite ich die Strings und schreibe sie auf den gleichen Weg wieder in eine csv Datei.

Die Umlaute gehen dabei verloren.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von theo »

Speicherst du die Datei in Excel auch in UTF8?

WideString brauchst du nicht für UTF8.

Mach es doch einfach mit einer TStringList und LoadFromFile / SaveToFile
Bzw. lies hier:
http://wiki.freepascal.org/CSV

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

theo hat geschrieben:Speicherst du die Datei in Excel auch in UTF8?
WideString brauchst du nicht für UTF8.
Mach es doch einfach mit einer TStringList und LoadFromFile / SaveToFile
Bzw. lies hier:
http://wiki.freepascal.org/CSV


Danke, dass werde ich mir in Ruhe ansehen. Vielleicht ist das die Lösung für mich.
Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von wp_xyz »

Kieler hat geschrieben:Dann mache ich etwas anderes falsch.
Ich speichere eine Exceldatei ins ".csv" Format.

Meine mit Lazarus 1.8 erstellte Anwendung öffnet diese Datei mit AssignFile und schreibe die einzelnen Werte in ein "array of Widestring".

Ich habe eben Dummy-Daten mit äöü in Excel erzeugt und als csv-Datei abgespeichert. Wenn ich diese in NotePad++ lade, werden die Umlaute nicht angezeigt. aber wenn ich unter "Kodierung" > "Zeichensatz" den Eintrag "Westeuropäisch" > "Windows 1252" auswähle, sind sie da. Daher speichert Excel eine csv-Datei als Ansi-Strings in der System-Codepage. Das heißt, mit "array of widestring" bist du völlig auf dem Holzweg. Nimm ein "Array of String" und schicke die Array-Elemente nach dem einlesen durch die Funktion CP1252ToUTF8 (in unit LConvEncoding) oder WinCPToUTF8 (ich glaube, in SysUtils) - die dabei erhaltenen Strings werden von Lazarus richtig angezeigt. Behaupte ich zumindest...

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

[quote/]
Ich habe eben Dummy-Daten mit äöü in Excel erzeugt und als csv-Datei abgespeichert. Wenn ich diese in NotePad++ lade, werden die Umlaute nicht angezeigt. aber wenn ich unter "Kodierung" > "Zeichensatz" den Eintrag "Westeuropäisch" > "Windows 1252" auswähle, sind sie da. Daher speichert Excel eine csv-Datei als Ansi-Strings in der System-Codepage. Das heißt, mit "array of widestring" bist du völlig auf dem Holzweg. Nimm ein "Array of String" und schicke die Array-Elemente nach dem einlesen durch die Funktion CP1252ToUTF8 (in unit LConvEncoding) oder WinCPToUTF8 (ich glaube, in SysUtils) - die dabei erhaltenen Strings werden von Lazarus richtig angezeigt. Behaupte ich zumindest...[/quote]

Vielen Dank, dass ist glaube ich der richtige Ansatz um mein Verständnis zu verbessern. Ich werde es probieren.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von theo »

Kieler hat geschrieben:Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?


Das kommt drauf an, wie die Daten von Excel her vorliegen.
Ich habe dich gefragt: "Speicherst du die Datei in Excel auch in UTF8?", die Frage hast du aber nicht beantwortet.
Ohne dies zu wissen, kann man nur spekulieren.
WideString brauchst du aber nicht. Die StringList würde reichen.

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

theo hat geschrieben:
Kieler hat geschrieben:Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?


Das kommt drauf an, wie die Daten von Excel her vorliegen.
Ich habe dich gefragt: "Speicherst du die Datei in Excel auch in UTF8?", die Frage hast du aber nicht beantwortet.
Ohne dies zu wissen, kann man nur spekulieren.
WideString brauchst du aber nicht. Die StringList würde reichen.


Nein, ich habe aus Excel nicht bewusst ins UTF8 Format gespeichert. Sondern, in "Westeuropäisch". Durch deine Nachfrage ist es mir erst bewusst geworden.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Marc »

Bin auch gerade an einem Programm das CSV Dateien importieren muss.
Habe keinerlei Probleme damit.Ich verwende die ganz normalen String Funktionen.
Versuche doch testweise mal Libreoffice. Das macht das wohl standardmässig schon richtig.
Good code comes from experience, experience comes from bad code.

Kieler
Beiträge: 17
Registriert: Sa 22. Mär 2014, 11:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kiel

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von Kieler »

Moin,

Ja, ich verwende eigentlich auch meistens LibreOffice.
Hier kann man, wenn man den Harken für Filter setzt, das Format vorgeben. Da muss ich etwas experimentieren. Aber im Endeffekt muss es auch mit Excel funktionieren. Sonst verwenden meine Kollegen es nie.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Beitrag von wp_xyz »

Geht natürlich. In dem "Speichern unter"-Dialog hat Excel in der Dateityp-Combo einen Eintrag "CSV UTF-8 (durch Trennzeichen getrennt)". Damit wird eine UTF-8 Datei geschrieben. Allerdings mit BOM (Byte order mar). Ältere Versionen von Lazarus/FPC haben damit evtl. ein Problem beim Einlesen in eine TStringLis, wenn ich mich recht erinnere. Wenn die erste drei Zeichen "seltsam" sind, musst du sie überspringen oder nachträglich löschen.

Antworten