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

Jenkins Pipeline发送NUnit生成HTML邮件时BOM字符显示问题

解决Jenkins邮件中NUnit HTML报告的BOM字符显示问题

NUnit通过XSLT生成的HTML测试报告带有UTF-8 BOM字符,使用Jenkins Pipeline的emailext命令发送该报告时,邮件正文里会出现字符(BOM的可视化表现),影响内容正常显示。当前流水线脚本如下:

emailext to: env.EMAIL_RECIPIENTS,
        subject: "${env.MODULE_ID} Test Results",
        body: '''${FILE,path="TestOutput/ResultDetails.html"}

Test Run Job = ${JOB_URL}''',
        mimeType: 'text/html'

方法1:预处理HTML文件,移除BOM字符

在调用emailext之前,先处理HTML文件去掉开头的BOM,以下是不同环境的实现方式:

跨平台Groovy脚本

在Pipeline中添加这段处理步骤:

script {
    def htmlFile = new File("TestOutput/ResultDetails.html")
    def content = htmlFile.getText("UTF-8")
    def cleanedContent = content.replaceFirst(/^\uFEFF/, "")
    htmlFile.write(cleanedContent, "UTF-8")
}

Linux/macOS环境用Shell命令

直接执行sed命令修改文件:

sed -i '1s/^\xef\xbb\xbf//' TestOutput/ResultDetails.html

Windows环境用PowerShell命令

通过PowerShell替换BOM:

(Get-Content TestOutput/ResultDetails.html -Raw) -replace '^\uFEFF','' | Set-Content TestOutput/ResultDetails.html -Encoding UTF8

方法2:直接在邮件正文中处理BOM

不用${FILE}宏读取文件,改用readFile步骤读取并移除BOM后再拼接内容:

emailext to: env.EMAIL_RECIPIENTS,
        subject: "${env.MODULE_ID} Test Results",
        body: """${readFile(file: 'TestOutput/ResultDetails.html', encoding: 'UTF-8').replaceFirst(/^\uFEFF/, "")}

Test Run Job = ${JOB_URL}""",
        mimeType: 'text/html'

方法3:从根源避免生成BOM

如果能修改NUnit的XSLT转换配置,直接让生成的HTML不带BOM:

  • 检查XSLT处理器的输出设置,确保编码为UTF-8且不生成BOM(多数工具默认不带,可能是当前配置特殊)
  • 比如用xsltproc时,添加--encoding utf-8参数强制输出无BOM的UTF-8文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24