codificar c# .net encoding csv character-encoding

c# - codificar - Error de codificación del archivo de lectura Csv



encoding ansi c# (2)

Estoy usando el siguiente método para leer el contenido del archivo Csv:

/// <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; } }

Este método funciona si tengo un archivo Csv codificado en UTF-8 con un schema.ini que se parece a esto:

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

Si tengo caracteres alemanes en un archivo Csv con codificación Unicode , el método no puede leer los datos correctamente.

¿Qué modificaciones puedo hacer al método anterior para leer archivos Unicode Csv? Si no hay manera de hacerlo de esta manera, ¿qué código de lectura de Csv puede sugerir?


Bueno, un lector de CSV de transmisión muy bueno y bien utilizado está en CodeProject ; eso es lo primero que intentaría ... pero parece que su codificación puede ser modificada, lo que puede no ser simple ... por supuesto, podría ser simplemente que se está rompiendo, en cuyo caso lo anterior podría funcionar multa.

Para CSV simple puede intentar analizarlo usted mismo ( string.Split etc.), pero hay suficientes edge-cases que vale la pena usar un analizador pre-rodado.