C#如何将Unicode字符转换为HTML实体名称而非编码?
Unicode转HTML实体名称的实现方案
第三方类库推荐
- HtmlAgilityPack:这款常用的HTML处理库支持实体名称替换,你可以基于已有的实体映射表构建字符-实体字典,借助库的工具类完成替换,或者自行遍历文本匹配字典内容。
- AngleSharp:现代化的HTML解析与处理库,其
HtmlEncoder组件可配置为优先使用实体名称编码,只需补充自定义的Unicode-实体名称映射即可覆盖默认的十进制编码行为。
自定义实现(无需第三方库)
如果不想引入外部依赖,可自行编写替换逻辑:
- 构建Unicode字符到HTML实体名称的映射字典(从你收集的实体列表中提取所需条目);
- 遍历输入文本,对每个字符进行判断:
- 若字符存在于映射字典中,替换为对应的实体名称;
- 若无对应实体,保留默认的十进制/十六进制编码(通过
System.Net.WebUtility.HtmlEncode处理)或设为null。
示例C#代码:
// 初始化实体映射字典,可根据需求扩展更多条目 var entityMappings = new Dictionary<char, string> { { 'é', "é" }, { 'à', "à" }, { 'ü', "ü" } }; string ConvertToNamedEntities(string input) { var resultBuilder = new StringBuilder(); foreach (char c in input) { if (entityMappings.TryGetValue(c, out var entityName)) { resultBuilder.Append(entityName); } else { // 无对应实体时,使用默认编码;若要设为null,替换为 resultBuilder.Append(null) 并处理空值逻辑 resultBuilder.Append(System.Net.WebUtility.HtmlEncode(c.ToString())); } } return resultBuilder.ToString(); }
XML生成的额外注意事项
由于你需要生成ASCII编码的XML文件,需注意:
- 替换完成后,确保XML输出流的编码设置为ASCII;
- 多数HTML实体名称在XML中不被默认识别,若必须使用这类实体,需在XML的DOCTYPE声明中引入实体定义,否则XML解析器会报错。若无需非XML预定义实体,建议仅使用XML原生支持的实体(如
<、>等)。
内容的提问来源于stack exchange,提问作者ZTHawk
相关产品推荐
相关产品推荐

