2012-04-01 1 views
0

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

EX: ‰ ---> "& # 137"
® ---> "& # 174"
Å ---> "& # 197"

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

+0

Я бы предположил, что не все элементы являются специальными символами? '

100‰
' - 1 элемент HTML, 3 символа, 1 специальный символ? –

ответ

1

Предполагая, что вы можете умещаться файл 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]); 
} 

Второй подход должен был бы пройти через каждый символ в файле и посмотреть, если он нуждается в замене (обратите внимание, что мы начинаем backwar ds из конца файла; если бы мы пошли вперед, мы постоянно бы того, чтобы изменить наше значение индекса, так как мы добавим длину файл):

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

Спасибо, Этан .. я думаю, что читатель потока - лучший – Dakshika