Umlaute, UTF-8 etc. : was ist das beste Vorgehen
-
- 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
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.
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.
-
- Beiträge: 6916
- 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
Lazarus arbeitet von Haus auf mit UTF8.Gibt es eine globale Einstellung um UTF-8 kompatibel zu sein?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen
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.
-
- 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
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.
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.
Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen
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
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
-
- 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
Danke, dass werde ich mir in Ruhe ansehen. Vielleicht ist das die Lösung für mich.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
Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?
Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen
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 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".
-
- 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
[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.
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.
Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen
Das kommt drauf an, wie die Daten von Excel her vorliegen.Kieler hat geschrieben: Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?
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.
-
- 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
Nein, ich habe aus Excel nicht bewusst ins UTF8 Format gespeichert. Sondern, in "Westeuropäisch". Durch deine Nachfrage ist es mir erst bewusst geworden.theo hat geschrieben:Das kommt drauf an, wie die Daten von Excel her vorliegen.Kieler hat geschrieben: Aber was hätte ich bei meinem Aufbau anders machen müssen, damit Umlaute Umlaute bleiben?
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.
-
- 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
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.
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.
-
- 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
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.
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.
Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen
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.