Можно ли прочитать французские символы в строку C # из файла .eml?

#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 .