#c# #regex #string #pdf #file-conversion
#c# #регулярное выражение #строка #PDF #преобразование файлов
Вопрос:
У меня есть проект, в котором мне нужно сгенерировать файл .pdf на основе содержимого файла .eml. При работе только с английскими символами я в порядке, pdf создается безупречно, и все работает (после того, как я удаляю весь ненужный html-мусор).
Однако возникает проблема, когда я пытаюсь прочитать в файле .eml, который заполнен французскими символами. В частности, французские символы хранятся в виде цифровых кодов, таких как =E9, = E8, amp; #339 и так далее и тому подобное.
Итак, моя проблема заключается в следующем. Я прочитал файл .eml с помощью:
string content = File.ReadAllText(filePath, Encoding.UTF8);
Однако он поставляется в виде обычного текста, и я не знаю, как заставить систему интерпретировать коды =E9 и = E8 и т. Д. Как французские символы. Я всегда могу использовать Regex.Replace все, но я надеюсь на более элегантное решение. Есть ли какой-либо способ взять эту длинную строку обычного текста и правильно интерпретировать встроенные в нее коды, чтобы французские символы отображались вместо их соответствующих кодов без использования примерно 30 выражений Regex.Replace?
Обратите внимание, что я не могу использовать какие-либо встроенные функции iTextSharp, поскольку мне также нужно иметь возможность включать французские символы (извлеченные из этого файла .eml) в имя файла pdf.
Спасибо
Ответ №1:
Вы можете использовать регулярные выражения, но двух регулярных выражений должно быть достаточно:
text = Regex.Replace(text, @"=([0-9A-Fa-f]{2})", match => ((char)uint.Parse(match.Groups[1].Value, NumberStyles.HexNumber)).ToString());
text = Regex.Replace(text, @"amp;#(d );", match => ((char)uint.Parse(match.Groups[1].Value)).ToString());
Другим способом было бы найти библиотеку синтаксического анализа MIME, которая предоставляет методы для синтаксического анализа частей MIME-сообщений, таким образом, вы бы расшифровали =E9
коды. Затем вам нужно будет вызвать WebUtility.HtmlDecode
, чтобы проанализировать HTML-объекты.
Комментарии:
1. Спасибо, это сработало, это не совсем то, к чему я стремился, но это определенно более элегантное решение, чем то, что я планировал раньше.
2. О, кстати, поскольку у вас, похоже, есть содержимое HTML, вам обязательно следует заменить вторую строку
WebUtility.HtmlDecode
.