![]() |
CSV mit gemischter Codierung lesen
Hallo
Ich dreh langsam durch... Ich habe eine CSV - Datei, die irgendwie sämtliche Codierungen enthalten kann. Da steht z.B. in einer Zeile: ;Hr. Brückner 6;;108;1;211;Weißweinschorle 0,5 l; also ü codiert - aber ß bleibt. Die Sonderzeichen aüü etc. kommen auch häufig nicht codiert vor. Und damit das Glück perfekt ist, steht dann noch H & # 2 5 2;tte (ohne die Leerzeichen, aber sonst macht DP ein ü draus) für Hütte Wenn ich jetzt die Zeilen irgendwie mit UTF8Encode manipuliere, erhalte ich halt: ;Hr. Brückner 6;;108;1;211;Wei�weinschorle 0,5 l; ü ist nun da, ß ist weg Kann man aus so etwas lesbaren Text mit Sonderzeichen machen? Frank |
AW: CSV mir gemischter Codierung lesen
Wenn es sich nur um einige wenige Ausnahmen handelt, die dir bekannt sind, könntest du vor dem UTF8Encode die entsprechenden Zeichen mit StrReplace selbst kodieren. Oder andersherum, falls das bei den entsprechenden Ausnahmen sinnvoller ist: Statt des UTF8Encode nur mit StrReplace Entsprechendes ersetzen.
|
AW: CSV mir gemischter Codierung lesen
In einem Datenfeld ist es aber korrekt Codiert?
Falls ja würde ich die Daten nach Zeilen/Spalten auftrennen und dann dort versuchen die Codierung zu erkennen. |
AW: CSV mir gemischter Codierung lesen
* Datei als ANSI laden
* Schauen, ob das Feld (jeder Wert einzeln und nicht für ganze Zeilen/Datei) "valides" UTF-8 enthält * wenn ja, dann das UTF-8 dekodieren, nach Unicode * wenn nein, dann von ANSI (definierte CodePage) nach Unicode ** überleg dir hier, was dein Standard-Encoding ist ... z.B. CodePage 1252 (Latin 1 / ISO 8859-1), CodePage 1250 (Latin 2 / ISO 8859-2) oder CodePage weißichgradnicht (Latin-9 / ISO/IEC 8859-15) * und zum Schluß noch ein HTML-Encode drüber jagen und ich würde den verhauen, der so eine CSV generieren lässt und keine passende Dokumentation/Spezifikation liefert ... aber alleine schon für so einen Mischmasch gehört er gerädert. |
AW: CSV mir gemischter Codierung lesen
Am besten wäre es mal in der Datenquelle zu prüfen was drinnensteht und damit meine ich nicht die CSV Datei sondern wo wie herkommt. Du kannst das mal jetzt so patchen wie angeführt. Aber bitte lass den Datenunsinn beheben.
Zitat:
|
AW: CSV mir gemischter Codierung lesen
Zitat:
Da aber das Semikolon Teil der Codierung ist, ist das Trennen der Felder etwas aufwändiger. Zitat:
Diese Kämpfe haben nur leider die höchste Misserfolgsbilanz... Zitat:
Beim Code scheitert es momentan schon am Prüfen des "validen" UTF-8. Da ich das bis morgen lösen muss, habe ich das nun doch schnell mit StringReplace realisiert. Vielen Danke für die Lösungsansätze. Frank |
AW: CSV mit gemischter Codierung lesen
Das UTF8Decode in der System.pas ist da sehr rabiat und gut nutzbar, für soeinen Mist. :stupid:
> bei ungültigem UTF-8 gibt das einfach einen Leerstring zurück, anstatt einer Fehlermeldung.
Delphi-Quellcode:
var
A: AnsiString; S: string; // UnicodeString A := ...; if (A <> '') and (UTF8Decode(A) <> '') then S := UTF8Decode(A) else S := A; // hier eventuell TEncoding, mit passender CodePage ... oder A als String mit CodePage definieren, siehe UTF8String in der System.pas S := HTMLEncode(S); ![]() ![]() Es dürfte dafür bestimmt auch irgendwo in den INDY ein Code versteckt sein. |
AW: CSV mit gemischter Codierung lesen
Zitat:
Langfristig gesehen, empfehle ich den Produzenten solcher Daten, die Finger einzeln zu brechen. Gruß K-H |
AW: CSV mit gemischter Codierung lesen
Ich meinte "TEncoding" ersetzt "ungültige" Zeichen/Zeichenfolgen durch "?" und UF8Encode macht einfach garnichts.
Heißt, daß man UTF8Encode was reingeben kann und wenn nichts rauskommt, dann war es kein valides UTF-8 und dann nimmt man einfach was Anderes. :zwinker: |
AW: CSV mit gemischter Codierung lesen
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Da kann man den String (original) mit dem nach UTF8Decode vergleichen. Damit kann ich wirklich nichts sinnvolles anfangen. Es ist aber auch nicht gerade mein "Fachgebiet"...:oops: Frank |
AW: CSV mit gemischter Codierung lesen
War weiter oben nicht die Rede von einem Ansi-String?
Und im Zweifel bevorzuge ich in solchen Fällen die Darstellung als Text und Hex-Code, Text ist auch immer nur interpretiert. Gruß K-H |
AW: CSV mit gemischter Codierung lesen
Für so ein aberwitziges Zeichenänderungsumgewusel hab' ich mit mal angehängte Funktion geschrieben.
Nicht elegant, aber erweiterbar für allen möglichen Schrott, den man da so geliefert bekommen könnte. [OT]Da die Forumssoftware einige der auszutauschenden Zeichenfolgen interpretiert und daher der Quelltext verfälscht wird, hab' ich die Routine hier nicht zwischen Delphi-Tags reingepackt.[/OT] |
AW: CSV mit gemischter Codierung lesen
Zitat:
Zitat:
Das erspart mir etwas Arbeit. Frank |
AW: CSV mit gemischter Codierung lesen
Einmal String (UnicodeString) und es ist alles zu spät, denn diese Konvertierung kann schon zu viel zerstört haben und zurückkonvertieren ist nicht immer möglich.
probier mal Folgendes: nimm einen Text, lass ihn von Google-Translate in irgendeine Sprache übersetzen und schau nach, was raus kommt, wenn du es versuchst wieder zurück zu übersetzen. Und wie ich schon gesagt hab, mußt du jeden Wert einzeln übersetzen, was einem auch klar sein sollte. Nimm einen Text, wo du mehrere Sprachen benutzt. Egal in welcher Reihenfolge der vielen Sprachen du versuchst das nach deutsch zu übersetzen, kann niemals was Ordentliches bei rauskommen, wenn man das versucht im Ganzen zu übersetzen. |
AW: CSV mit gemischter Codierung lesen
Wenn Du mir eine Beispieldatei zukommen lassen könntest (muss ja nix großes sein), könnte ich mal schauen, ob mein StreamReader das sauber lesen kann. Der wechselt nämlich das Encoding, wenn's sein muss - soweit ich mich recht erinnere... ;-)
|
AW: CSV mit gemischter Codierung lesen
Zitat:
Ich hatte auch daran gedacht (wie von B.G. ja schon empfohlen), die Spalten einzeln zu decodieren. Aber ich komme nicht umhin, vorher die Codierungen wie "& # 2 5 2 ;" zu ersetzen, da das letzte Semikolon (dank fehlender Quoten) ja als Delimiter interpretiert wird. Zitat:
Und momentan ist dieser Fall gelöst. Der Hersteller der Software, der die CSV erzeugt, hat auch ein Schreiben von mir und ich hoffe, dass das Problem diesmal an der Wurzel beseitigt werden kann. Frank |
AW: CSV mit gemischter Codierung lesen
Zitat:
|
AW: CSV mit gemischter Codierung lesen
Zitat:
|
AW: CSV mit gemischter Codierung lesen
Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz