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

Für Fragen von Einsteigern und Programmieranfängern...

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

Beitragvon Kieler » 11. Jul 2018, 15:55 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.
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Mathias » 11. Jul 2018, 16:27 Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

Gibt es eine globale Einstellung um UTF-8 kompatibel zu sein?
Lazarus arbeitet von Haus auf mit UTF8.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4262
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 11. Jul 2018, 17:32 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.
wp_xyz
 
Beiträge: 2616
Registriert: 8. Apr 2011, 08:01

Beitragvon Kieler » 12. Jul 2018, 12:05 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.
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon theo » 12. Jul 2018, 13:35 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
theo
 
Beiträge: 8054
Registriert: 11. Sep 2006, 18:01

Beitragvon Kieler » 12. Jul 2018, 13:59 Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

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?
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 12. Jul 2018, 14:02 Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

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...
wp_xyz
 
Beiträge: 2616
Registriert: 8. Apr 2011, 08:01

Beitragvon Kieler » 12. Jul 2018, 14:20 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.
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon theo » 12. Jul 2018, 14:29 Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

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.
theo
 
Beiträge: 8054
Registriert: 11. Sep 2006, 18:01

Beitragvon Kieler » 12. Jul 2018, 14:41 Re: Umlaute, UTF-8 etc. : was ist das beste Vorgehen

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.
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Marc » 14. Jul 2018, 05:34 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.
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 190
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Kieler » 14. Jul 2018, 05:49 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.
Kieler
 
Beiträge: 17
Registriert: 22. Mär 2014, 11:58
Wohnort: Kiel
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 14. Jul 2018, 09:26 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.
wp_xyz
 
Beiträge: 2616
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried