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

标签 c# asp.net excel gridview arabic

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

我正在使用以下代码将同一 Web 应用程序中的许多 GridView 导出到 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();
}

我遇到的情况之间的区别,如果我从通常的选择查询中将数据检索到 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文件的标题

 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

关于c# - 将 gridview 导出到 Excel 时无法识别阿拉伯字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090305/

相关文章:

c# - 如何在 Sql Server Agent 中设置年度作业

c# - 使用 EPPlus 复制/克隆 Excel 形状?

excel - 对于下一个循环(初学者)

C# .Net 从表单帖子中读取字符串输入

javascript - 如何使用 javascript 更改基于另一个下拉列表的下拉列表值?

c# - 使用 SharedMemory MMF 实现快速 .NET 无锁进程间

c# - 如何通过服务引用发布 Reflection.MethodBase

vba - 宏 - 每隔一行复制并粘贴单元格

c# - 使用 asp.net core 2.2 创建类别和子类别依赖列表框

c# - 匿名方法应该按条件返回一个字符串