Преобразование HTML-сущности в десятичное значение с использованием визуального C # - PullRequest
0 голосов
/ 01 апреля 2012

Мне нужно преобразовать специальные HTML-сущности в десятичные значения с помощью визуального C #.Сначала мне нужно загрузить файл .html и заменить все специальные значения символов на десятичные.

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

, так каков оптимизированный способ замены всех символов на десятичные значения.У меня есть список из более чем 1000 символов и лиц.

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Предполагая, что вы можете удобно разместить свой 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 чтением файла по одному байту за раз.

0 голосов
/ 01 апреля 2012

Вы должны использовать WebUtility.HtmlEncode Method (String)

...