将 gridview 导出到 Excel 时无法识别阿拉伯字符

Arabic Characters are not recognized when exporting gridview to Excel

当我将网格视图导出到 Excel 时,我无法识别阿拉伯字符。阿拉伯语文本显示为“Ø®Ù​​„اص”,它无法识别阿拉伯语数据以及阿拉伯语网格视图 header

我正在使用以下代码导出到同一 Web 应用程序中的 Excel 许多网格视图,它工作正常并且可以识别阿拉伯文本

protected void BtnExportDateSearch_Click(object sender, EventArgs e)
{
    Response.Clear();

    Response.AddHeader("content-disposition", "attachment;filename=ExportDataDateSearch.xls");

    HttpContext.Current.Response.Charset = "UTF-8";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;

    Response.ContentType = "application/vnd.xls";
    StringWriter StringWriter = new System.IO.StringWriter();

    HtmlTextWriter HtmlTextWriter = new HtmlTextWriter(StringWriter);
    GridView1.RenderControl(HtmlTextWriter);

    Response.Write(StringWriter.ToString());
    Response.End();
}

我遇到的情况之间的区别,如果我从通常的 select 查询中将数据检索到 gridview,它会识别阿拉伯文本 但如果我使用 unpivot 和 CASE 语句,阿拉伯语在 asp 页面的 gridview 上显示正常,但当我将其导出到 excel 时,阿拉伯语文本无法识别。

这是存储过程,它是我的 gridview 的数据源:

ALTER PROCEDURE [dbo].[UnpivotApprovedPalms]
    @StartDateTime datetime2(7),
    @EndDateTime datetime2(7)
AS
BEGIN
    SELECT 
        FarmID, 
        CASE PalmsName 
            WHEN 'kalas' THEN N'خلاص'
            WHEN 'khnizi' THEN N'خنيزي'
            WHEN 'jashKharma' THEN N'جش خرمة'
            WHEN 'anbaratAlMadina' THEN N'عنبرة المدينة'
            WHEN 'NabtatSaif' THEN N'نبتة سيف'
            ELSE PalmsName 
        END AS 'PalmsName',
        Quantity, TransactionDateTime
    FROM 
        [ApprovedPalmsInFarm] 
    UNPIVOT
        (Quantity
         FOR PalmsName IN ([kalas], [khnizi], [jashKharma], [anbaratAlMadina])
        ) u   
    WHERE
        u.TransactionDateTime >= @StartDateTime 
        AND u.TransactionDateTime <= @EndDateTime;

    RETURN
END

导致这个问题的代码有什么问题?为什么当我更改查询时它工作正常,但特别是我的 unpivot 查询和 case 语句无法识别阿拉伯语? asp 页面可以正确查看带有阿拉伯语文本的 gridview,但只有当我将其导出到 Excel 时,阿拉伯语无法识别

Byte Order Mark (BOM) 添加到 excel 文件的 header

 Response.AddHeader("content-disposition", "attachment;filename=ExportDataDateSearch.xls");

// Insert below
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

引用:ASP.NET Excel export encoding problem