Проблема кодирования - PullRequest
1 голос
/ 31 августа 2010

Я хочу экспортировать данные из DaraGrid в файл Excel. Наличие этих данных на французском языке Вот мой метод:

public static void ExportGridView( DataGrid dataGrid, string fileName)
    {
        HttpResponse m_Response = HttpContext.Current.Response;
        m_Response.Clear();
        m_Response.AddHeader("content-disposition",
            string.Format("attachment;filename={0}", fileName));
        m_Response.Charset = "";           
        m_Response.ContentType = "application/octet-stream"; //"application/vnd.xls";
        m_Response.ContentEncoding = Encoding.UTF32;
        StringWriter stringWrite = new StringWriter();
        HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
        dataGrid.RenderControl(htmlWrite);
        m_Response.Write(stringWrite.ToString());
        m_Response.End();

}

В противном случае вывод не в хорошем французском формате

Ex)

Engagé => engagà ©

Société => Sociétée

Ответы [ 3 ]

6 голосов
/ 31 августа 2010

Попробуйте использовать ISO-8859-1:

public static void ExportGridView(DataGrid dataGrid, string fileName)
{
    var response = HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
    var isoEncoding = Encoding.GetEncoding("iso-8859-1");
    response.Charset = isoEncoding.WebName;
    response.ContentType = "application/vnd.ms-excel";
    response.ContentEncoding = isoEncoding;
    using (var writer = new StringWriter())
    using (var htmlWriter = new HtmlTextWriter(writer))
    {
        dataGrid.RenderControl(htmlWriter);
        response.Write(writer.GetStringBuilder().ToString());
    }
    response.End();
}

Еще одна альтернатива, и, возможно, лучше - это сгенерировать целую HTML-страницу и указать кодировку UTF8, которая, по-моему, лучше:

public static void ExportGridView(DataGrid dataGrid, string fileName)
{
    var response = HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
    response.Charset = Encoding.UTF8.WebName;
    response.ContentType = "application/vnd.ms-excel";
    response.ContentEncoding = Encoding.UTF8;
    using (var writer = new StringWriter())
    using (var htmlWriter = new HtmlTextWriter(writer))
    {
        dataGrid.RenderControl(htmlWriter);
        string html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Test</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>{0}</body></html>";
        response.Write(string.Format(html, writer.GetStringBuilder()));
    }
    response.End();
}
0 голосов
/ 31 августа 2010

Я подозреваю, что он / она использует utf32 по причине. Я был бы соблазн ударить эту линию полностью и посмотреть, что произойдет. utf8 работал бы, если бы он переходил из Excel в DataGrid. Я думаю, что вы здесь, но все наоборот. Эта линия может даже не быть проблемой.

Я более подозрительно отношусь к этим объектам "StringWriter". Я не знаком с ними. Если вы используете html для перемещения, браузеры не должны распознавать utf32, а вместо этого обрабатывают его как utf16, что может быть вашей проблемой.

0 голосов
/ 31 августа 2010

Установка кодировки содержимого в UTF8 должна гарантировать, что специальные символы в файле Excel будут правильно интерпретироваться.Конечно, вы должны убедиться, что на клиентском компьютере установлены французские шрифты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...