[Jenkins]Console Output中文显示问号的问题解决
------------------------------------------------------
如需转载,请注明出处。
文章链接:https://www.cnblogs.com/dzblog/p/10342074.html
------------------------------------------------------
问题
一觉起来,发现控制台输出的中文是????。
尝试解决
参考了网上的解决方法,修改Jenkins全局属性,发现还是解决不了。
查找原因
经过几个小时的摸索,发现同一个job在不同的slave机器上表现不同。
比如execute shell里只有一句话
echo '中文'
Slave1
echo '??'
Slave2
echo $'中�\226\207'
Slave3
echo '中文'
可以看出是因为Jenkins的原因,而是因为Slave1机器的某个设置,影响到了控制台的输出。
解决
1. 检查terminal所用shell
➜ ~ echo $SHELL /bin/zsh
2. 在terminal里输入中文,尝试echo '中文'
➜ Home echo '<00e4><00b8><00ad><00e6><0096><0087>' 中文
发现无法正常显示。
3. 在terminal里输入locale,查看
➜ ~ locale LANG= LC_COLLATE="C" LC_CTYPE="C" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL=
发现LANG和LC_ALL均为空。
4. 编辑 vim ~/.zshrc文件
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
要使修改立即生效,需在终端输入 source ~/.zshrc
5. 编辑 vim ~/.bash_profile文件
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
要使修改立即生效,需在终端输入 source ~/.bash_profile
6. 重新打开Terminal,检查locale
➜ Home locale LANG="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_CTYPE="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_ALL="en_US.UTF-8"
发现LANG和LC_ALL已经不为空了。
7. 再次构建同一个Job,检查控制台输出。
可以看出已经正常显示中文了,问题解决。
cheers~