为什么csv文件在导出时不显示特殊字符?

时间:2017-05-31 12:24:23

标签: c# forms

我在我的应用程序上使用此代码将datagridview导出为csv文件。它工作正常,但csv没有正确显示单元格值。请参阅下面的图像,我也粘贴了我的代码。我可以更改此代码以修复此?

这是datagridview

enter image description here

这是导出的csv,它显示如下

enter image description here

这是我的代码

public void writeCSV(DataGridView gridIn, string outputFile)  
    {  

        //test to see if the DataGridView has any rows  
        if (gridIn.RowCount > 0)  
        {  
            string value = "";  
            DataGridViewRow dr = new DataGridViewRow();  
             StreamWriter swOut = new StreamWriter(outputFile);  


            //write header rows to csv  
            for (int i = 0; i <= gridIn.Columns.Count - 1; i++)  
            {  
                if (i > 0)  
                {  
                    swOut.Write(",");  
                }  
                swOut.Write(gridIn.Columns[i].HeaderText);  
            }  

            swOut.WriteLine();  

            //write DataGridView rows to csv  
            for (int j = 0; j <= gridIn.Rows.Count - 2; j++)  
            {  
                if (j > 0)  
                {  
                    swOut.WriteLine();  
                }  

                dr = gridIn.Rows[j];  

                for (int i = 0; i <= gridIn.Columns.Count - 1; i++)  
                {  
                    if (i > 0)  
                    {  
                        swOut.Write(",");  
                    }  

                    value = dr.Cells[i].Value.ToString();  
                    //replace comma's with spaces  
                    value = value.Replace(',', ' ');  
                    //replace embedded newlines with spaces  
                    value = value.Replace(Environment.NewLine, " ");  

                    swOut.Write(value);  
                }  
            }  
            swOut.Close();  
        }  
    }  

3 个答案:

答案 0 :(得分:4)

您需要设置StreamWriter的编码:

StreamWriter swOut = new StreamWriter(outputFile, System.Text.Encoding.UTF8);

例如UTF-8。

在Excel中显示的数字5.027E + 13。您可以将单元格的文本格式更改为数字,excel将显示该值。或者在记事本中打开csv文件,你会看到数字是正确的。

答案 1 :(得分:0)

将数据导出到csv文件时需要设置正确的文本编码,例如System.Text.Encoding.UTF8

答案 2 :(得分:0)

StreamWriter swOut =  new StreamWriter(outputFile, System.Text.Encoding.UTF8);