AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CSV mit gemischter Codierung lesen

Ein Thema von dataspider · begonnen am 28. Jul 2016 · letzter Beitrag vom 4. Aug 2016
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#1

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 10:34
Das UTF8Decode in der System.pas ist da sehr rabiat und gut nutzbar, für soeinen Mist.
> 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);
http://stackoverflow.com/questions/2...-escaping-html
http://www.delphipraxis.net/148888-u...vertieren.html
Es dürfte dafür bestimmt auch irgendwo in den INDY ein Code versteckt sein.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 10:47
Das UTF8Decode in der System.pas ist da sehr rabiat und gut nutzbar, für soeinen Mist.
> bei ungültigem UTF-8 gibt das einfach einen Leerstring zurück, anstatt einer Fehlermeldung.
Das könnte aber unproduktiv sein, da dann der Chef auf der Matte steht und meckert wo denn die Lücken herkommen.
Langfristig gesehen, empfehle ich den Produzenten solcher Daten, die Finger einzeln zu brechen.


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#3

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 12:52
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 14:24
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.
Ich habe mal Screenshot vom Debugger angehangen.
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"...

Frank
Angehängte Grafiken
Dateityp: jpg original.jpg (49,0 KB, 28x aufgerufen)
Dateityp: jpg utf8decode.jpg (56,5 KB, 25x aufgerufen)
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 15:15
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 15:48
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]

Geändert von nahpets (21. Nov 2017 um 16:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 16:20
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
Ich habe das auch mit AnsiString getestet. Das Ergebnis ist gleich. Und zum Analysieren nehme ich immer die HEX - Ansicht.

Für so ein aberwitziges Zeichenänderungsumgewusel hab' ich mit mal angehängte Funktion geschrieben.
Vielen Dank, damit kann ich meine Liste erweitern.
Das erspart mir etwas Arbeit.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#8

AW: CSV mit gemischter Codierung lesen

  Alt 29. Jul 2016, 17:29
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
273 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: CSV mit gemischter Codierung lesen

  Alt 3. Aug 2016, 15:21
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...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: CSV mit gemischter Codierung lesen

  Alt 4. Aug 2016, 14:01
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.
Danke für die Erklärungen.
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.


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...
Vielen Dank für das Angebot. Aber ich versuche immer erst mal, mit eigenem Code hinzukommen.
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
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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