【问题标题】:Is it possible to read French characters into a C# string from an .eml file?是否可以将法语字符从 .eml 文件读入 C# 字符串?
【发布时间】:2014-08-16 11:56:20
【问题描述】:

我有一个项目,我需要根据 .eml 文件中的内容生成一个 .pdf 文件。当只处理英文字符时,我很好,pdf 被完美地创建并且一切正常(在我去除所有不必要的 html 垃圾之后)。

但是,当我尝试读取一个充满法语字符的 .eml 文件时,问题就来了。特别是法语字符存储为数字代码,如 =E9、=E8、œ 等等。

所以我的问题是这样的。我读了 .eml 文件:

string content = File.ReadAllText(filePath, Encoding.UTF8);

但是它以纯文本形式出现,我不知道如何使系统将 =E9 和 =E8 等代码解释为法语字符。我总是可以 Regex.Replace 一切,但我希望有一个更优雅的解决方案。有没有办法接收那长长的纯文本字符串并正确解释嵌入其中的代码,以便在不使用 30 Regex.Replace 表达式的情况下显示法语字符而不是它们各自的代码?

请注意,我不能使用任何内置的 iTextSharp 功能,因为我还需要能够将法语字符(从该 .eml 文件中提取)合并到 pdf 的文件名中。

谢谢

【问题讨论】:

    标签: c# regex string pdf file-conversion


    【解决方案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, @"&#(\d+);", match => ((char)uint.Parse(match.Groups[1].Value)).ToString());
    

    另一种方法是找到一个 MIME 解析库,它公开了解析部分 MIME 消息的方法,这样您就可以解码 =E9 代码。然后,您需要调用 WebUtility.HtmlDecode 来解析 HTML 实体。

    【讨论】:

    • 谢谢,它成功了,这不是我想要的,但它绝对是一个比我之前计划的更优雅的解决方案。
    • 哦,顺便说一句,既然您似乎有 HTML 内容,您绝对应该将第二行替换为 WebUtility.HtmlDecode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多