前文
jenkins的插件提供了windows和linux命令行的使用方式,如下:
linux: sh ''
windows: bat ''
但相对linux,windows在使用过程中会出现编码异常,比如输出一句中文,和查看文件夹目录,结果是中文乱码,文件夹目录正常输出。命令如下:
bat '''
echo '你好,世界' # 输出乱码
echo 'hello world' # 正常输出
dir # 正常输出
'''
分析&解决
原因是jenkins windows也就是我们默认的cmd,是以gbk编码的,但jenkins的输入是以utf-8编码的,所以导致中文乱码。解决方法网上有挺多,其中涉及到配置的,我试了都失败,比如jenkins端的设置改为Dfile.encoding=utf-8,并没什么用。第二种是指定cmd的输出为utf-8,我们可以用chcp查看当前cmd的默认编码,一般都是936,即GBK。修改成UTF-8的命令代码号是65001,同时修改bat的输出也按utf-8编码输出,改成如下:
bat encoding: 'utf-8', script: '''
chcp 65001
echo '你好,世界' # 正常输出
echo 'hello world' # 正常输出
dir # 正常输出
'''
以上述的方式运行后,可以解决绝大多数问题,但是有几个问题无法解决,第一个chcp 65001在执行后,一些常用的命令输出会以英文的形式,比如ipconfig,英文输出后其中夹杂的中文会乱码,而且,如果执行python文件、java文件,会发现输出的中文都乱码;我的理解是系统输出默认都是gbk,所以一旦指定了utf-8,会导致乱码。那如何解决呢?将其改为GBK即可,同时将命令封装成bat文件,命令如下:
bat encoding: 'GBK', script: '''
chcp 936
call execute.bat
'''
其中bat文件则包含了上述的echo命令和dir命令,如果去执行,会发现可能会执行乱码。这个乱码的原因是,bat脚本如果默认编码不是ANSI编码的话,还是会出现utf-8编码的bat文件,而输出却是GBK,导致乱码,所以要将bat改为ANSI编码,ANSI编码是指根据不同地区所设置的默认编码,比如中国地区就是ANSI=GBK,台湾则是ANSI=BIG5。依次类推。ANSI编码的更改可以用notepad编辑修改。