Announcement

Collapse
No announcement yet.

CSV-Datei von ANSI auf UTF8 kodieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CSV-Datei von ANSI auf UTF8 kodieren

    Hallo,

    Zurzeit lade ich mir FTP-Files über FTPWebRequest / FTPWebResponse und speichere das über einen FileStream lokal ab.
    Ich bekomme es aber nicht hin, daß die Daten mir in UTF8 vorliegen. die Datei liegt im ANSI-Format vor. Ich benötige aber UTF8 wegen der Umlaute.

    Ich habe bisher versucht, die Daten beim Auslesen zu konvertieren, ohne Erfolg.

    Zum Einlesen der Daten aus der bereits gespeicherten Datei habe ich zunächst versucht, dies über den TextFieldParser zu erledigen.
    Ich schreibe mir ein Mapping der Überschriften weg, nach dem Schema:
    [highlight=csharp]
    public CSVParser( String file_path, bool build_mapping = true ) {


    this.parser = new Microsoft.VisualBasic.FileIO.TextFieldParser( file_path, Encoding.UTF8 );
    this.parser.Delimiters = new string[] { ";" };
    this.parser.HasFieldsEnclosedInQuotes = true;
    this.parser.TrimWhiteSpace = true;


    if ( build_mapping ) {


    string[] headline = parser.ReadFields();

    for ( int x=0; x<headline.Length; x++ ) {

    byte[] bytes = Encoding.Default.GetBytes( headline[x] );
    this.ColumnsMapping.Add( Encoding.UTF8.GetString(bytes), x ); // ColumnsMapping ist ein Dictionary<string, int>

    }

    }

    }
    [/highlight]
    Das Problem hierbei ist, daß der Anbieter, der die CSV-Dateien auf dem Server erzeugt in den Spaltenüberschriften dummerweise Umlaute verwendet.

    Ob ich das Encoding nun verwende oder nicht spielt keine Rolle. Es werden die Umlaute immer als Fragezeichen in einer schwarzen Raute angezeigt, wie man das von Encoding-Problemen kennt.
    Da der TextFieldParser per Default auch UTF8 Encoding im Konstruktor setzt, könnte ich mir denken, daß die Daten von vorn herein fehlerhaft geladen werden.
    Also habe ich ein paar Encodings getestet, aber keines hat sinnvolle Umlaute hervorgebracht.

    Wenn ich die Datei selbst analysiere, liegt die wie gesagt im ANSI Encoding vor.
    Hat jemand einen Tipp, wie ich die Datei auf UTF8 bekomme?
    Oder vielleicht ein Schubs in eine andere Richtung?

    Danke für Hinweise.
    Arne
    Zuletzt editiert von Arne Drews; 26.11.2015, 17:56.
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Ich benötige aber UTF8 wegen der Umlaute.
    Nein? Du musst die Datei in dem Zeichensatz lesen mit dem die Datei auch erstellt wurde. Denn sollte der Author der Datei kennen.
    Umlaute gibt es in allen möglichen Zeichensätzen nicht nur in UTF-8.

    Wenn die Quelle Encoding ignorant war aus Deutschland stammt und dir das Encoding nicht verrät probier mal
    Code:
    Encoding.GetEncoding(1252)
    als Encoding.
    1252 ist die Windows Codepage für Westeuropa.

    Ansonsten eine Beispieldatei anhängen dann kann man das mal mit einem Hexeditor analysieren.

    Comment


    • #3
      Hi Ralf,

      Danke, das passt natürlich. Wenn man erstmal verkehrt denkt, wirds auch nix...
      PHP rocks!
      Eine Initiative der PHP Community

      Comment

      Working...
      X