------------------------------------------------------
如需轉載,請注明出處。
文章鏈接: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~