Предполагая, что вы можете удобно разместить свой HTML-файл в StringBuilder
, вы можете использовать несколько различных подходов.Во-первых, я предполагаю, что все замены ваших персонажей хранятся в словаре:
var replacements = new Dictionary<char,string> {
{ '®', "‰" },
// ...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
чтением файла по одному байту за раз.