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
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
Comment