我有一个项目需要根据.eml文件中的内容生成.pdf文件。在处理英文字符时,我很好,pdf创建完美无缺,一切正常(在我删除所有不必要的html垃圾之后)。
但是当我尝试读入一个充满法语字符的.eml文件时,问题就出现了。特别是法语字符存储为数字代码,如= E9,= E8,&#339,依此类推。
所以我的问题是这个。我用:
读取了.eml文件string content = File.ReadAllText(filePath, Encoding.UTF8);
然而,它以纯文本形式出现,我不知道如何使系统将= E9和= E8等代码解释为法语字符。我总是可以Regex.Replace所有东西,但我希望有一个更优雅的解决方案。是否有任何方法可以接受那长串纯文本并正确解释嵌入的代码,以便在不使用30个Regex.Replace表达式的情况下显示法语字符而不是各自的代码?
适当注意我不能使用任何内置的iTextSharp功能,因为我还需要能够将法语字符(从.eml文件中提取)合并到pdf的文件名中。
由于
答案 0 :(得分:0)
您可以使用正则表达式,但两个正则表达式应该足够了:
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实体。