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
相关产品推荐
相关产品推荐

