Umlaute werden in CSV Ausgabe falsch dargestellt

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Umlaute werden in CSV Ausgabe falsch dargestellt

    Hallo Zusammen,

    ich habe folgendes Problem beim schreiben von CSV Dateien:

    Ich habe ein Programm, welches CSV Dateien einliest, bearbeitet und dann ausgibt. Solange die Input CSV-Datei in UTF8 Codierung codiert ist, ergibt sich bei der Ausgabe (System.Text.Encoding.Default) kein Problem mit den Umlauten (ö, ü, ä...). Wenn jedoch die Input CSV-Datei in ANSI-Codiert ist, so gibt er die Umlaute als komische Sonderzeichen aus. Habe schon verschiedene System.Text.Encoding varianten ausprobiert und bei keinem komme ich auf die richtige Ausgabe der Umlauten.


    Kurz zusammengefasst:

    Input (UTF8) --verarbeitung--> Output (UTF8) = richtige Umlaute
    Input (ANSI) --verarbeitung--> Output (UTF8) = komische Sonderzeichen anstatt Umlaute


    Hat Jemand ne Idee, wie man dieses Problem umgehen könnte, da die Input Dateien jeweils mit verschiedener Codierung daherkommen?

    Vielen Dank und beste Grüsse

    Davencyw


    Hier mein Code, falls der von belangen ist.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim Zeile As String
    2. Dim counter As Integer = 0
    3. Dim path As String = filePath & fileName
    4. Using sw As New StreamWriter(path, False, System.Text.Encoding.Default)
    5. For Each line In writelist
    6. Zeile = ""
    7. For n = 0 To spaltenbreite
    8. If n = spaltenbreite Then
    9. Zeile &= writelist(counter).item(n)
    10. Else
    11. Zeile &= writelist(counter).item(n) & ";"
    12. End If
    13. Next
    14. sw.WriteLine(Zeile)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Davencyw“ ()

    Davencyw schrieb:

    Hat Jemand ne Idee, wie man dieses Problem umgehen könnte, da die Input Dateien jeweils mit verschiedener Codierung daherkommen?
    Nicht wirklich, denn das ist ein generelles Problem von CSV, ein Grund (von 4), warum von CSV als Datenformat abzuraten ist.

    Eine höhere Trefferquote beim Einlesen erhälst du, wenn du den TextfieldParser mit Encoding.Default instanzierst.

    Gugge auch CSV importieren
    (Allerdings mussichdas mittm Encoding da noch nachbessern)
    @ErfinderDesRades Werde mir mal den CSV-Import link ansehen danke! :)
    Ansonsten werde ich mir eine kleine Applikation schreiben zum konvertieren der falschen Dateien..

    @xtts02
    Habe ich auch schon probiert, ändert leider nichts an der Ausgabe...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Davencyw“ ()

    Ich hab hier was ganz unprofessionelles: Die CSV-Datei mit Notepad öffnen, "Datei speichern unter" >> UTF-8 auswählen und speichern.... :whistling:
    Das Leben ist nicht so kompliziert. Eine süsse Erinnerung tut's.
    Indiana Jocutus - Jäger des Variablen-Schatzes
    Jo - sollte man nicht denken, aber olle Notepad ist garnet so blöd, wenns drum geht, das Encoding einer TextDatei richtig zu erraten.




    xtts02 schrieb:

    Du verwendet beim StreamWriter Encoding.Default. Warum nicht UTF8?
    War ich damit gemeint?
    Die Antwort ausführlich: Detect Encoding from BOM

    kurz: Utf-8 generiert gewöhnlich ein BOM, anhand dessen der StreamReader sich richtig einstellt, auch wenn ihm Encoding.Default zugewiesen wurde.

    Hingegen findet er kein BOM vor, so nimmt er idiotischerweise Utf-8 an, was meist falsch ist, denn wie gesagt: utf-8 weist sich selbst aus.
    Aber encoding.Default weist sich nicht selbst aus, und so hat man beim lustigen Encoding-Raten eine höhere Trefferquote, wenn man .Default angibt.