[GELÖST] Dreh mich im Kreis mit 'ß'...

Für Fragen von Einsteigern und Programmieranfängern...
BitRausch
Beiträge: 50
Registriert: Di 30. Mai 2017, 09:32

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von BitRausch »

...von den mehreren tausend Datensätzen haben nur diese 2 Datensätze das Zeichenproblem.
Daher nehme ich sehr stark an das hier aus einem Host Terminal Daten direkt in die Tabelle oder in der davorgelagerten DB kopiert wurden und das es wahrscheinlich bis jetzt niemandem aufgefallen ist...

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

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von Mathias »

Ich habe deine wollte deine CSV mit LibreOffice importieren, dort kann man sehr viele Zeichensätze auswählen, nur keine bringt ein Blüten und Stauß hin.
Somit wurde diese mit etwas total exotischem abgespeichert.
Dateianhänge
Bildschirmfoto vom 2017-09-30 17-12-31.png
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: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von wp_xyz »

Danke. Da ist ja schon die Excel-Datei kaputt. Wenn ich die xlsx-Datei entpacke und mir die sharedStrings.xml ansehe, in der alle Zell-Texte stehen, erhalte ich:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3">
 <si>
  <t>Beispiel für Zeichenfehler</t>
  </si>
 <si>
  <t xml:space="preserve">Rosa Bl³ten</t>
  </si>
 <si>
  <t xml:space="preserve">RoterStrau</t>
  </si>
</sst>

In der 1.Zeile steht 'encoding="UTF-8' - das heißt, Excel erwartet, dass das eine UTF8-Datei ist. Wenn ich die xml-Datei zusätzlich in den Hex-Editor lade, sehe ich am '³' von "Rosa Blüten" die Byte-Sequenz $C2 $B3, das 'ü' findet man lt. Zeichentabelle von Lazarus aber als $C2 $BC. Ähnlich beim 'ß' von 'Roter Strauß': In der Datei steht $C2 $9D, aber 'ß' ist $C3 $9F.

Mir ist keine Zeichencodierung bekannt, die solche Veränderungen macht, evtl. ist das Chaos auch mit mehreren Konvertierungsschritten passiert. Wenn man sich die Bitfolge von B3 und BC, bzw. 9D und 9F hinschreibt, sieht man aber auch, dass im ersten Fall nur zwei, im zweiten nur ein Bit umgekippt sein könnten.

Nachdem die Exceldatei schon kaputt ist, muss natürlich auch der CSV-Export kaputt sein.

Solange man nicht weiß, wie die Daten in die Excel-Datei gelangt sind, kann man schlecht eine Stategie angeben, wie man die Daten konvertieren könnte. Ich würde, so wie hier, die ganze Excel-Datei ansehen: Benenne sie um mit der Endung .zip und packe sie in eine temporäres Verzeichnis aus. Lade die Datei sharedstrings.xml mit Lazarus in einen Memory-Stream und durchsuche die ganze Datei nach Zeichen >127 - das sind UTF8-Zeichen. Bestimme die Wörter, die diese Zeichen enthalten, und prüfe anhand der Lazarus-Zeichentabelle ("Bearbeiten" > "Aus der Zeichentabelle einfügen"), ob hier ebenfalls andere Zeichen erwartet werden. Falls da eine Systematik dahintersteckt, kannst du ein Konvertierungsprogramm schreiben, das die fehlerhaften Zeichen korrigiert.

Beim Export nach CSV musst du darauf auchten, dass Excel eine UTF8-Datei anlegt. Am besten mit bekannten Zeichen und einem Hex-Editor prüfen.
Zuletzt geändert von wp_xyz am Sa 30. Sep 2017, 17:30, insgesamt 2-mal geändert.

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

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von wp_xyz »

BitRausch hat geschrieben:...von den mehreren tausend Datensätzen haben nur diese 2 Datensätze das Zeichenproblem.

Gibt es auch den umgekehrten Fall, dass in der Datei weitere 'ß' und 'ü' enthalten sind, die richtig geschrieben sind? Das wäre ein starkes Indiz dafür, dass die Fehler durch die Übertragung erzeugt worden sind.

BitRausch
Beiträge: 50
Registriert: Di 30. Mai 2017, 09:32

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von BitRausch »

Ja. Diese Buchstaben sind in den anderen Datensätzen korrekt...

BitRausch
Beiträge: 50
Registriert: Di 30. Mai 2017, 09:32

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von BitRausch »

Ok. Jetzt habe ich mir das ein paar Mal durchgelesen...

Wenn ich Dich richtig verstehe dann ist, zusammengefasst, die ursprüngliche Excel Datei defekt. Somit ist auch die daraus resultierende CSV Datei fehlerhaft.
D.h. die Routinen die ich eingebaut habe sind nicht hilfreich...
OK. Ich werde mal mit dem Datenlieferanten sprechen ... so hat das ja überhaupt kein Sinn.

Wahnsinn...

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

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von wp_xyz »

BitRausch hat geschrieben:[...] dann ist, zusammengefasst, die ursprüngliche Excel Datei defekt. Somit ist auch die daraus resultierende CSV Datei fehlerhaft.

Ja. Wenn bei ein und demselben Zeichen einmal ein 'ü' erscheint und einmal ein '³', dann ist irgendetwas schief gelaufen. Wiegesagt, du kannst die Rohdaten der Excel-Datei wie oben beschrieben ansehen - das sind ganz normale xml-Dateien; die Texte stehen in sharedStrings.xml als lange Liste von <si>-Nodes.

BitRausch hat geschrieben:D.h. die Routinen die ich eingebaut habe sind nicht hilfreich...

Ja. Beim nächsten Mal erhältst du eine Datei, in der zwei andere Bits falsch übertragen wurden. Das kann keine Korrekturroutine ausgleichen

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

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von wp_xyz »

Ach ja das noch: Wenn du fehlerfreie Excel-Dateien hast, kannst du diese auch direkt, ohne Umweg über CSV-Export, mit FPSpreadsheet einlesen. Siehe http://wiki.lazarus.freepascal.org/FPSpreadsheet, etwa http://wiki.lazarus.freepascal.org/FPSp ... ough_cells.

BitRausch
Beiträge: 50
Registriert: Di 30. Mai 2017, 09:32

Re: [GELÖST] Dreh mich im Kreis mit 'ß'...

Beitrag von BitRausch »

Was für eine Odysee...
Natürlich hatte ich den Tunnelblick auf die CSV Datei...
Ich kann mich nur bei dir bedanken wp_xyz!
Habe wieder viel gelernt...und (wieder) die Lektion: traue keiner externen Datenquelle
Die Sache mit Excel kannte ich gar nicht...

Am Mittwoch kümmer ich mich mal um die original Tabelle und forder sie nochmal an...

Antworten