You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Redemption 6.3转换日文.msg为.eml时字符编码错误问题

解决方案:修复ISO-2022-JP编码.msg转.eml的字符异常问题

1. 手动设置会话默认代码页

Redemption默认可能未正确识别ISO-2022-JP编码的.msg文件,加载消息前可将RDOSession.DefaultCodePage设为ISO-2022-JP对应的代码页(50220),强制会话用指定编码解析内容:

RDOSession session = getRDOSessionForCurrentThread();
// 指定ISO-2022-JP编码对应的代码页
session.DefaultCodePage = 50220;
try 
{ 
    using (SafeRDOMail message = new SafeRDOMail(session.GetMessageFromMsgFile(msgFilePath))) 
    { 
        message.RDOMail.SaveAs(emlFilePath, rdoSaveAsType.olRFC822_Redemption); 
    } 
} 
catch (Exception ex) 
{ 
    throw new Exception(String.Format("Error converting {0} to eml file.", emlFilePath), ex); 
}

2. 直接使用RDOMail.EML属性写入文件

若SaveAs方法仍有编码问题,可跳过该方法,直接读取EML属性返回的原始字节流写入文件,避免中间编码转换环节:

RDOSession session = getRDOSessionForCurrentThread();
session.DefaultCodePage = 50220;
try 
{ 
    using (SafeRDOMail message = new SafeRDOMail(session.GetMessageFromMsgFile(msgFilePath))) 
    { 
        // 获取原始EML字节数组
        byte[] emlBytes = message.RDOMail.EML;
        // 直接写入文件,保留原始编码格式
        File.WriteAllBytes(emlFilePath, emlBytes);
    } 
} 
catch (Exception ex) 
{ 
    throw new Exception(String.Format("Error converting {0} to eml file.", emlFilePath), ex); 
}

3. 手动修正MIME头编码

如果发件人等字段仍显示异常,可手动提取字段内容,按照RFC 2047标准用ISO-2022-JP重新编码后替换EML中的对应字段:

RDOSession session = getRDOSessionForCurrentThread();
session.DefaultCodePage = 50220;
try 
{ 
    using (SafeRDOMail message = new SafeRDOMail(session.GetMessageFromMsgFile(msgFilePath))) 
    { 
        // 用ISO-2022-JP编码解析原始EML内容
        string emlContent = Encoding.GetEncoding(50220).GetString(message.RDOMail.EML);
        
        // 提取发件人名称并按RFC2047格式编码
        string senderName = message.RDOMail.Sender.Name;
        string encodedSenderName = $"=?ISO-2022-JP?B?{Convert.ToBase64String(Encoding.GetEncoding(50220).GetBytes(senderName))}?=";
        // 替换EML中的发件人行(匹配"From: 名称 <邮箱>"格式)
        emlContent = Regex.Replace(emlContent, @"From: .* <(.*)>", $"From: {encodedSenderName} <$1>");
        
        // 保存修正后的EML文件
        File.WriteAllText(emlFilePath, emlContent, Encoding.GetEncoding(50220));
    } 
} 
catch (Exception ex) 
{ 
    throw new Exception(String.Format("Error converting {0} to eml file.", emlFilePath), ex); 
}

4. 升级Redemption版本

Redemption 6.3可能存在ISO-2022-JP编码的已知处理问题,尝试升级到最新稳定版本,新版本通常会修复特定编码的兼容逻辑。


内容的提问来源于stack exchange,提问作者Mitanshu Bhoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:36:27