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