使用UTF8编码显示法语字符问题

时间:2015-05-01 15:21:03

标签: c# csv utf-8

我正在编写一个Web抓取应用程序,它使用UTF8编码动态地将数据写入CSV文件。法语字符无法正常显示。如果我将生成的CSV输出保存为CSV文件,则首先在记事本中打开CSV文件而不进行任何更改,然后当我在Excel中重新打开文件时,将正确显示字符。首先使用记事本进行手动干预不是此动态解决方案的选项。下面是示例代码。任何想法如何解决这一问题?谢谢。

public System.IO.Stream dsCSV(string url, string langID)
    {
        System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
        if (langID.Equals(Fr))
        {
            Thread.CurrentThread.CurrentCulture = cultureFr;
            Thread.CurrentThread.CurrentUICulture = cultureFr;
            processCSVData(sb1, url);
        }
        else
        {
            Thread.CurrentThread.CurrentCulture = cultureEn;
            Thread.CurrentThread.CurrentUICulture = cultureEn;
            processCSVData(sb1, url);
        }
        byte[] resultBytes = Encoding.UTF8.GetBytes(sb1.ToString());
        return new MemoryStream(resultBytes);
    }

    public System.Text.StringBuilder processCSVData(System.Text.StringBuilder sb1, string url)
    {

            sb1.Append("Sociétés par portefeuille ministériel");
            sb1.Append(",");
            sb1.Append("Actif total");
            sb1.Append(",");
            sb1.Append("Passif à court terme");
            sb1.Append(",");
            sb1.Append("Passif à long terme");
            sb1.Append(",");
            sb1.Append("Avoir");
            sb1.Append(",");
            sb1.Append("Emploi");
            sb1.Append("\n");


        WebOperationContext.Current.OutgoingResponse.ContentType = "text/csv";
        WebOperationContext.Current.OutgoingResponse.Headers.Add("content-disposition", "attachment; filename=" + Resources.CcSe.filename + ".csv");
        return sb1;
    }

1 个答案:

答案 0 :(得分:1)

Excel的版本(2013年之前)需要在UTF-8文件开头的BOM才能识别编码。记事本会将BOM添加到您的文件中,这就是您看到Excel修改过的文件的原因。

将字节序列0xEF 0xBB 0xBF添加到您正在生成的CSV文件的开头。