【问题标题】:Convert html entity to decimal value using visual C#使用 Visual C# 将 html 实体转换为十进制值
【发布时间】:2012-04-15 05:37:06
【问题描述】:

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

EX: ‰ ---> "‰"
® ---> "®"
Å ---> "Å"

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

【问题讨论】:

  • 我会假设并非所有元素都是特殊字符? <div>100&#137</div> 是 1 个 Html 元素,3 个字符,1 个特殊字符?

标签: c# special-characters html-entities


【解决方案1】:

【讨论】:

    【解决方案2】:

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

    var replacements = new Dictionary<char,string> {
      { '®', "&#137" },
      // ...etc
    }
    

    首先,将您的文件读入StringBuilder

    var html = new StringBuilder( File.ReadAllText( filename ) );
    

    第一种方法是你可以使用StringBuilder.Replace(string,string):

    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] );
      }
    }
    

    如果不了解 StringBuilder.Replace(string,string) 的实现细节或进行一些分析,很难说哪个更有效,但我会留给你。

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

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 2014-06-25
      • 1970-01-01
      • 2012-10-13
      • 2012-10-06
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多