C# 使用visual C将html实体转换为十进制值#

C# 使用visual C将html实体转换为十进制值#,c#,special-characters,html-entities,C#,Special Characters,Html Entities,我需要使用visual C#将特殊html实体转换为其十进制值。首先,我需要加载.html文件,并需要将所有特殊字符值替换为十进制值 例:‰-->“和#137” ® ---> "®" Å-->“和#197” 那么,用十进制值替换所有字符的优化方法是什么呢。我有超过1000个字符和实体的列表 您应该使用假设您可以轻松地将HTML文件放入StringBuilder中,您可以采取两种不同的方法。首先,我假设您的所有字符替换都存储在字典中: var replacements = new Dic

我需要使用visual C#将特殊html实体转换为其十进制值。首先,我需要加载.html文件,并需要将所有特殊字符值替换为十进制值

例:‰-->“和#137”
® ---> "®"
Å-->“和#197”


那么,用十进制值替换所有字符的优化方法是什么呢。我有超过1000个字符和实体的列表

您应该使用

假设您可以轻松地将HTML文件放入
StringBuilder
中,您可以采取两种不同的方法。首先,我假设您的所有字符替换都存储在字典中:

var replacements = new Dictionary<char,string> {
  { '®', "&#137" },
  // ...etc
}
第一种方法是可以使用
StringBuilder.Replace(string,string)

第二种方法是检查文件中的每个字符,看看是否需要替换(请注意,我们从文件末尾向后开始;如果向前,我们将不得不不断修改索引值,因为我们正在向文件添加长度):

如果没有关于
StringBuilder.Replace(string,string)
实现的详细信息或进行一些分析,很难说哪一个更有效,但我将留给您来决定


如果无法将整个HTML文件加载到
StringBuilder
,您可以使用第二种技术的变体,使用
StreamReader
一次读取一个字节的文件。

我假设不是所有元素都是特殊字符
100‰
是一个Html元素,三个字符,一个特殊字符吗?
var html = new StringBuilder( File.ReadAllText( filename ) );
foreach( var c in replacements.Keys ) {
  html.Replace( c.ToString(), replacements[c] );
}
for( int i=html.Length-1; i>0; i-- ) {
  var c = html[i];
  if( replacements.ContainsKey( c ) ) {
    html.Remove( i, 1 );
    html.Insert( i, replacements[c] );
  }
}