[GELÖST] Dreh mich im Kreis mit 'ß'...
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
...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...
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...
-
- Beiträge: 6915
- 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 'ß'...
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.
Somit wurde diese mit etwas total exotischem abgespeichert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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:
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.
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>
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.
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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 hat geschrieben:...von den mehreren tausend Datensätzen haben nur diese 2 Datensätze das Zeichenproblem.
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
Ja. Diese Buchstaben sind in den anderen Datensätzen korrekt...
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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...
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...
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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:[...] dann ist, zusammengefasst, die ursprüngliche Excel Datei defekt. Somit ist auch die daraus resultierende CSV Datei fehlerhaft.
Ja. Beim nächsten Mal erhältst du eine Datei, in der zwei andere Bits falsch übertragen wurden. Das kann keine Korrekturroutine ausgleichenBitRausch hat geschrieben:D.h. die Routinen die ich eingebaut habe sind nicht hilfreich...
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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.
Re: [GELÖST] Dreh mich im Kreis mit 'ß'...
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...
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...