如何编码CSV文件导入?

时间:2012-02-09 09:42:19

标签: c# file encoding csv

我有这段代码:

string ABSfilePath = "";

CsvFileReader reader = null;
ABSfilePath = Server.MapPath("/myfile.csv");

try
{
    reader = new CsvFileReader(ABSfilePath);

    CsvRow myRow = new CsvRow();
    while (reader.ReadRow(myRow))
    {
        Response.Write(myRow[0].ToString()+"<br />");
    }
}
catch (Exception err)
{
    Response.Write(err.Message);
}
finally
{
    if (reader != null)
        reader.Dispose();
}

但是当我尝试导入我的文件myfile.csv时,一些字符被“不正确”编码,如:

STATUA DELLA LIBERT�

那么,怎么编码呢?感谢

3 个答案:

答案 0 :(得分:2)

reader = new CsvFileReader(ABSfilePath);

是罪魁祸首。您应该首先使用正确的编码打开StreamReader(我怀疑是UTF-8),

StreamReader MyStreamReader = new StreamReader(ABSfilePath, System.Text.Encoding.WhateverYouNeed);

然后做

reader = new CsvFileReader(MyStreamReader.BaseStream);

答案 1 :(得分:1)

在您的情况下会发生的情况是CSV的编码和页面的编码(html)不匹配...您要么确保两者都使用相同的编码,要么在读取时转换CSV的编码。我不知道您使用哪个类/库CsvFileReader,但最简单的方法是使用正确的编码打开CSV,例如使用StreamReader而不是ABSFilePath作为参数。

答案 2 :(得分:1)

您使用的是非标准类,我猜您使用的是this one。它的设计很差,它不会让你以任何方式改变编码。您需要添加一个新的构造函数来修复它:

    public CsvFileWriter(string filename, Encoding encoding)
        : base(filename, encoding)
    {
    }

现在你可以让它读取除了utf-8以外的东西。最好的开始是Encoding.Default。