ASP.NET GridView无法显示XML特殊字符,如何全局禁用HTML编码?
解决ASP.NET GridView绑定XML时特殊字符显示异常及全局控制编码问题
问题分析
核心问题:
- GridView中Activity列的特殊字符(如
4-Â-0444)被修改为4-Â0444,直接原因是后台代码主动执行了HTML编码,同时XML读取可能存在编码不匹配问题。 - 需要全局配置避免不必要的HTML编码,防止同类问题重复出现。
分步解决方案
1. 修复当前代码的直接问题
你的后台GridView1_RowDataBound事件中,主动对Activity列执行了Server.HtmlEncode,这会覆盖BoundField设置的HtmlEncode="false",导致字符被编码修改。
修改C#代码:
移除编码逻辑并指定XML读取编码:
DataSet dsResult = new DataSet(); // 指定UTF-8编码读取XML,确保字符完整解析 dsResult.ReadXml(new StreamReader(Server.MapPath("XMLFile1.xml"), Encoding.UTF8)); if (dsResult.Tables[0].Rows.Count > 0) { GridView1.DataSource = dsResult.Tables[0]; GridView1.DataBind(); } // 移除以下主动编码的逻辑 // protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) // { // if (e.Row.RowType == DataControlRowType.DataRow) // { // e.Row.Cells[2].Text = Server.HtmlEncode(Convert.ToString(e.Row.Cells[2].Text)); // } // }
2. 全局编码控制配置
通过Web.config统一站点编码规则,避免不必要的HTML编码:
(1)统一站点编码
在<system.web>节点下添加全球化配置,确保请求、响应和文件编码一致:
<system.web> <globalization fileEncoding="UTF-8" requestEncoding="UTF-8" responseEncoding="UTF-8" culture="zh-CN" uiCulture="zh-CN" /> </system.web>
(2)关闭不必要的请求验证(可选)
若站点无需请求验证(需确保业务安全),可在<pages>节点配置:
<system.web> <pages validateRequest="false" pageEncoding="UTF-8"> <!-- 其他页面配置 --> </pages> <!-- .NET 4.0+ 需添加此节点关闭严格请求验证模式 --> <httpRuntime requestValidationMode="2.0" /> </system.web>
(3)全局统一GridView列编码行为
如果希望所有BoundField默认关闭HTML编码,可自定义继承BoundField的控件;更简便的方式是在所有GridView的BoundField上显式设置HtmlEncode="false",配合Web.config的编码配置,确保原始字符正常显示。
3. XML文件编码检查
确保XML文件保存时使用UTF-8编码(带/无BOM均可,StreamReader会自动识别),避免因文件编码不匹配导致字符读取错误。
验证结果
修改完成后,GridView的Activity列将正确显示XML中的原始值4-Â-0444,不会被HTML编码修改。
内容的提问来源于stack exchange,提问作者aditya mukherjee
相关产品推荐
相关产品推荐

