在实践中,使用Jenkins发送测试报告,收到邮件,邮件内容中的中文为乱码,邮件发送的方式是在Jenkins发邮件设置中设置邮件内容为:${FILE,path="report_ug.html"} ,其中report_ug.html 就是报告内容的html

report_ug.html java生成方式:代码就是生成一个html字符串,把这个字符串保存为report_ug.html 文件

public class Test {

    public static void main(String[] args) {

        String content ="<html>\n" +
" <head>\n" +
" <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />\n" +
" </head>\n" +
"<body lang=ZH-CN>\n" +
" 还有乱码么a安抚?:.发送。; utf-8 is there any wrong code ? 18888899999\n" +
"</body>\n" +
"</html>";
FileOperation.write(ConfigUtil.getAutoCofigRootPath()+"report_ug.html",content,"GBK"); }
}

发送的邮件显示为乱码:

网上查找解决办法,但是由于Jenkins管理权限在其他部门,而且使用比较久,也不会随意变更一些什么设置,只有只有从代码上解决问题

首先,网上有的说html保存的时候要以GBK编码方式保存,但是不知道为什么,怎么保存GBK编码方式的html文件都不能解决问题。最后找到从代码上解决的办法,那就是把html文件中的所有中文,以Unicode编码16进制编码保存。

中文 Unicode编码16进制 编码查询地址为:http://www.mytju.com/classcode/tools/encode_gb2312.asp,如查找“还有乱码么”的ascii为:

这样,就需要把html中的每个中文找出来,并转换成Unicode编码16进制编码,在这个编码前面加个"&#x" ,后面加个";" ,如:“还”字的编码为“8FD8”,在html中保存为:"&#x8FD8;"

Java 代码需要处理的步骤为:

1、遍历字符串,如果是中文,就转换为16进制Unicode编码

2、遍历字符串,如果是中文标点,就转换为16进制Unicode编码

3、重新组装html

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Convert {
public static String stringToUnicode16(String s) {
// 先把字符串转换为ASCII码
//保存重新组装的html代码
StringBuffer temp = new StringBuffer();
// 把字符中转换为字符数组
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (isChinese(String.valueOf(chars[i])) || isChinesePunctuation(chars[i])) { temp.append("&#x" + Integer.toHexString((int) chars[i]) + ";"); } else {
temp.append(String.valueOf(chars[i]));
} } return temp.toString();
} public static boolean isChinese(String str) {
//判断是否是中文
String regEx = "[\u4e00-\u9fa5]";
Pattern pat = Pattern.compile(regEx);
Matcher matcher = pat.matcher(str);
boolean flg = false;
if (matcher.find())
flg = true;
return flg;
} // 根据UnicodeBlock方法判断中文标点符号
public static boolean isChinesePunctuation(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS
|| ub == Character.UnicodeBlock.VERTICAL_FORMS) {
return true;
} else {
return false;
}
}
}

这样,html中的中文就以16进制Unicode编码 保存。

调用方式为:

import com.paxunke.smart.utils.*;

public class Test {

    public static void main(String[] args) {

        String content = "<html>\n" +
" <head>\n" +
" <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />\n" +
" </head>\n" +
"<body lang=ZH-CN>\n" +
" 还有乱码么a安抚?:.发送。; utf-8 is there any wrong code ? 18888899999\n" +
"</body>\n" +
"</html>";
String temp = Convert.stringToUnicode16(content);
System.out.println(temp);
FileOperation.write(ConfigUtil.getAutoCofigRootPath() + "report_ug.html", temp, "GBK"); }
}

执行,打印的html文件内容为:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body lang=ZH-CN>
还有乱码么a安抚?:.发送。; utf-8 is there any wrong code ? 18888899999
</body>
</html>

再把这个文件在Jenkins中发送邮件,乱码问题解决

从代码上解决Jenkins 发送邮件中文乱码问题的更多相关文章

  1. 解决jenkins slave 中文乱码 encoding=ANSI_X3.4-1968

    jenkins配置slave进行构建时,发现slave构建的控制台输入中文乱码,查看master,slave的jenkins系统信息 file.encoding和sun.jnu.encoding都没有 ...

  2. 解决jenkins 发送邮件图片乱码问题

    1.在本地mac上测试邮件发送正常 发送邮件内容图片没有乱码 2.公司测试服务器是一台windows2008的系统jmeter + ant  jenkins 安装完成后 设置邮件发送格式模板,设置附件 ...

  3. 解决jenkins控制台中文乱码问题

    1,进入[系统管理]->[系统设置]->全局属性:KEY: LANG; VALUE:zh.CH.UTF-8 2,修改Jenkins.xml文件 在Jenkins安装目录下找到jenkins ...

  4. Jenkins发送邮件中文乱码问题解决

    在环境变量中添加: JAVA_TOOL_OPTIONS  =  -Dfile.encoding=UTF8 配置好后,重启Jenkins即可

  5. 完美解决Informix的中文乱码问题

    完美解决Informix的中文乱码问题  Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景 ...

  6. 教你解决Sublime Text中文乱码问题

    教你解决Sublime Text中文乱码问题[转载自成长的企鹅]       Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...

  7. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

    前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀:         ...

  8. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  9. zabbix解决监控图形中文乱码

    原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...

随机推荐

  1. C#通过代码调用PowerShell

    var userId = "MyAccount@XXXXX.partner.onmschina.cn"; var tenantId = "XXXXX-ca13-4bcb- ...

  2. Struts2(九)OGNL标签一与Struts2标签

    一.什么是OGNL  Object Graph Navigation Language对象图导航语言. 是Struts2默认的表达式语言,开源,功能更强大.和EL表达式有点相似 存取对象的属性,调用对 ...

  3. linux中的 IO端口映射和IO内存映射

    参考自:http://blog.csdn.net/zyhorse2010/article/details/6590488 CPU地址空间 (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬 ...

  4. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

  5. 使用paramiko中 Server not found in known_hosts的错误解决

    报错的格式如下: 主要是缺少set_missing_host_key_policy配置信息. set_missing_host_key_policy方法,是制定连接远程主机没有本地密钥或HostKey ...

  6. std::accumulate使用的一个小细节

    今天使用std::accumulate模板函数的时候出现了一个错误,特此记录一下. #include <iostream> #include <numeric> int mai ...

  7. chrony 时间同步

    RHEL7.4 192.168.100.1 作为时间服务器,其它主机到这台来同步时间. 时间服务器安装及配置:#yum install chrony --RHEL7默认已安装chrony,而没有安装n ...

  8. Kafka 配置

    安装 解压放到/opt/kafka, 软链一个latest出来, 先要启动zookeeper. 可以使用独立的zookeeper服务, 也可以用kafka自带的, 在lib目录下带了zookeeper ...

  9. IntelliJ IDEA遇到Unable to parse template “Class”错误

    在新安装的Ubuntu16下运行IntelliJ IDEA时, 遇到一个错误,在新建class的时候,提示Unable to parse template “Class” 通过查看 Settings ...

  10. Condition Variables

    Condition Variables Condition variables are synchronization primitives that enable threads to wait u ...