Frage

Ich bin mit dem folgende Verfahren zum Lesen csv-Datei Inhalt:

    /// <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 haben codierte Csv mit einer Datei schema.ini , die etwa wie folgt aussieht:

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

Wenn ich deutsche Zeichen in einem CSV-Datei Unicode Codierung, wobei das Verfahren kann die Daten nicht richtig gelesen.

Welche Änderungen kann ich auf das obige Verfahren machen lesen Unicode CSV-Dateien? Wenn es keine Möglichkeit, es auf diese Weise zu tun, was Csv-Lesecode können Sie vorschlagen?

War es hilfreich?

Lösung

Versuchen CharacterSet=UNICODE in Ihrer schema.ini Datei. Obwohl dies nicht es nach funktioniert das Thread auf Microsoft Foren .

Andere Tipps

Nun, ein sehr guter und gut genutzt Streaming CSV-Reader ist auf Codeproject ; das ist das erste, was ich versuchen würde ... aber es klingt wie Ihre Codierung borked werden, was es nicht einfach machen könnte ... natürlich, es könnte nur odbc sein, dass die oben in dem Fall könnte bricht, arbeitet in Ordnung.

Für einfache CSV könnten Sie versuchen, es selbst Parsen (string.Split usw.), aber es gibt genug kanten Fälle, dass ein vorgewalzte Parser wert verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top