5 Stimmen

Csv-Datei lesen Kodierungsfehler

Ich verwende die folgende Methode zum Lesen des Inhalts von Csv-Dateien:

    /// <summary>
    /// Reads data from a CSV file to a datatable
    /// </summary>
    /// <param name="filePath">Path to the CSV file</param>
    /// <returns>Datatable filled with data read from the CSV file</returns>
    public DataTable ReadCsv(string filePath)
    {
        if (string.IsNullOrEmpty(filePath))
        {
            log.Error("Invalid CSV file name.");
            return null;
        }

        try
        {
            DataTable dt = new DataTable();

            string folder = FileMngr.Instance.ExtractFileDir(filePath);
            string fileName = FileMngr.Instance.ExtractFileName(filePath);
            string connectionString = 
            string.Concat(@"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=",
            folder, ";");

            using (OdbcConnection conn = 
                   new System.Data.Odbc.OdbcConnection(connectionString))
            {
                string selectCommand = string.Concat("select * from [", fileName, "]");
                using (OdbcDataAdapter da = new OdbcDataAdapter(selectCommand, conn))
                {
                    da.Fill(dt);
                }
            }

            return dt;
        }
        catch (Exception ex)
        {
            log.Error("Error loading CSV content", ex);
            return null;
        }
    }

Diese Methode funktioniert, wenn ich eine UTF-8 kodierte Csv-Datei mit einer schema.ini die in etwa so aussieht:

[Example.csv]
Format=Delimited(,)
ColNameHeader=True
MaxScanRows=2
CharacterSet=ANSI

Wenn ich deutsche Zeichen in einer Csv-Datei mit Unicode Kodierung, kann die Methode die Daten nicht korrekt lesen.

Welche Änderungen kann ich an der obigen Methode vornehmen, um Folgendes zu lesen Unicode Csv-Dateien? Wenn es keine Möglichkeit gibt, dies auf diese Weise zu tun, welchen Csv-Lesecode können Sie vorschlagen?

8voto

csgero Punkte 2753

Versuchen Sie es mit CharacterSet=UNICODE in Ihrer schema.ini-Datei. Dies ist zwar nicht dokumentiert auf MSDN Es funktioniert folgendermaßen Thema in den Microsoft-Foren .

4voto

Marc Gravell Punkte 970173

Nun, ein sehr guter und häufig verwendeter CSV-Reader für Streaming ist auf CodeProject ; das ist das erste, was ich versuchen würde... aber es klingt wie Ihre Verschlüsselung kann borked sein, die es nicht einfach machen könnte... natürlich könnte es nur odbc sein, die bricht, in diesem Fall die oben genannten könnte gut funktionieren.

Bei einfachen CSV-Dateien können Sie versuchen, sie selbst zu parsen ( string.Split usw.), aber es gibt genügend Randfälle, für die sich der Einsatz eines Pre-Rolling-Parsers lohnt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X