Mac邮件归档App遇Windows邮件乱码,求识别原编码修复Mojibake
邮件归档乱码的编码识别问题
我开发的macOS应用支持从邮件客户端及IMAP账户归档邮件。用户通过Mail归档Windows用户发来的邮件后,应用直接读取硬盘数据时出现乱码,已识别部分字符对应关系:
‰→ä¸→ü
我针对ö、ä、ü、ß制作编码对照表,但未匹配到对应数据。测试代码如下:
dim theLeft as string = "ö ä ü ß" for currentEncoding as integer = 0 to Encodings.Count - 1 dim EncodingInternetName as String = Encodings.Item(currentEncoding).internetName if EncodingInternetName.IndexOf("iso") = -1 and EncodingInternetName.IndexOf("windows") = -1 then Continue dim newString as string = DefineEncoding(theLeft, Encodings.Item(currentEncoding)) '<---convert newString = ConvertEncoding(newString, Encodings.UTF8) Result.Add(EncodingInternetName + " " + newString) next
结论与验证建议
这种乱码是典型的编码二次错误转换导致的,对应原编码为Windows-1252(CP1252)——这是Windows系统默认的邮件文本编码之一。
具体逻辑:原始Windows邮件中的特殊字符(如ä、ü)以Windows-1252编码存储,Mac端读取时错误将其当作UTF-8解码,后续又进行了一次编码转换,最终出现你看到的乱码。
可以调整测试逻辑反向验证:
// 以乱码"‰"为例,反向转换还原原始字符 dim garbledString as string = "‰" // 将乱码按UTF-8解码后转成Windows-1252,即可得到"ä" dim originalChar as string = ConvertEncoding(DefineEncoding(garbledString, Encodings.UTF8), Encodings.Windows1252)
内容的提问来源于stack exchange,提问作者Beatrix Willius
相关产品推荐
相关产品推荐

