Leia Csv erro de codificação de arquivo

votos
4

Eu estou usando o método a seguir para ler o conteúdo do arquivo 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 se eu tiver um UTF-8 arquivo CSV codificado com um schema.ini que é algo como isto:

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

Se eu tiver caracteres alemães em um arquivo CSV com Unicode codificação, o método não pode ler os dados corretamente.

Que modificações que eu posso fazer com o método acima para ler Unicode arquivos CSV? Se não houver nenhuma maneira de fazê-lo desta maneira, o código CSV leitura pode sugerir?

Publicado 12/01/2009 em 08:37
fonte usuário
Em outras línguas...                            


2 respostas

votos
8

Tente usar CharacterSet=UNICODEem seu arquivo schema.ini. Embora este não é documentado no MSDN funciona de acordo com esta linha no Microsoft Fóruns .

Respondeu 12/01/2009 em 09:07
fonte usuário

votos
3

Bem, um muito bom e bem utilizado leitor CSV de streaming está em CodeProject ; que é a primeira coisa que eu tentaria ... mas parece que a codificação pode ser borked, que pode não torná-lo simples ... é claro, pode ser apenas ODBC que está quebrando, caso em que o acima pode funcionar bem.

Para simples CSV Você poderia tentar analisá-lo você mesmo ( string.Splitetc), mas existem suficientes borda casos que um analisador de pré-rolou vale a pena usar.

Respondeu 12/01/2009 em 08:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more