需求
項(xiàng)目需要,我采用jenkins + python + vs2017來(lái)實(shí)現(xiàn)自動(dòng)打包的流程,之前都是用現(xiàn)成的,這一次是自己實(shí)踐,搭建過(guò)程就省略了,教程太多,jenkins控制臺(tái)的亂碼問(wèn)題,倒是讓我比較困擾,所以記錄一下。
問(wèn)題現(xiàn)象
jenkins中開(kāi)始打包任務(wù)之后,發(fā)現(xiàn)在vs2017編譯之后輸出的日志中,中文部分都是亂碼。
無(wú)效解決
- 在網(wǎng)上發(fā)現(xiàn)一個(gè)方式,在系統(tǒng)設(shè)置的語(yǔ)言設(shè)置中,將當(dāng)前系統(tǒng)的編碼選擇為beta版Unicode編碼,重啟系統(tǒng),啟動(dòng)jenkins,可以看到中文確實(shí)展示正常,但是,此時(shí)我們的代碼中各種錯(cuò)誤,是因?yàn)橹岸际鞘褂胓bk編碼,現(xiàn)在整個(gè)系統(tǒng)都變成了Unicode編碼,所以報(bào)錯(cuò),一般的大工程中,去修改代碼是不現(xiàn)實(shí)的,所以這個(gè)方法pass
- 又發(fā)現(xiàn)一個(gè)比較古老的方式,在系統(tǒng)環(huán)境變量中設(shè)置JAVA_TOOL_OPTIONS路徑,配置上utf-8,然后在jenkins的系統(tǒng)設(shè)置,在全局屬性添加LANG和utf-8的鍵值對(duì),這個(gè)方法也不起作用,java使用的Unicode編碼,現(xiàn)在jenkins基本和java保持抑制了
- 以及還有在python中頭部添加“coding=utf-8”這種方法,也不起作用?,F(xiàn)在的python3.x之后,默認(rèn)都是utf-8的編碼
- 還看到一個(gè)方法,就是在終端里面使用chcp 65001來(lái)設(shè)置,但是我嘗試發(fā)現(xiàn),這個(gè)也不起作用
思考
后來(lái)我又嘗試了另一種方案,我把輸出的日志內(nèi)容寫(xiě)到文件中,發(fā)現(xiàn)其編碼是gbk,所以我將這個(gè)日志內(nèi)容轉(zhuǎn)換成了utf-8,但是輸出的中文還是亂碼。
然后結(jié)合上面第一個(gè)解決方案,發(fā)現(xiàn)關(guān)鍵就在于windows控制臺(tái)輸出編碼和utf-8的沖突,所以還是要從系統(tǒng)控制臺(tái)編碼上入手,才應(yīng)該可能解決。
最終解決
最終我發(fā)現(xiàn)了一個(gè)帖子,從里面找到了一下幾個(gè)東西:
sys.getdefaultencoding() #系統(tǒng)編碼 ===> utf-8
sys.getfilesystemencoding() #文件編碼 ===> utf-8
sys.stdin.encoding #控制臺(tái)輸入流編碼 ===> gbk
sys.stdout.encoding #控制臺(tái)輸出流編碼 ===> gbk
sys.stderr.encoding #控制臺(tái)錯(cuò)誤流編碼 ===> gbk
所以現(xiàn)在,就知道了亂碼的根源,無(wú)論我們的日志是什么編碼,都將按照gbk來(lái)輸出,然后jenkins這邊會(huì)以u(píng)tf-8來(lái)解析,所以亂碼出現(xiàn)了,緊接著就找到了python中專(zhuān)門(mén)設(shè)置編碼的方法,如下:
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
我的場(chǎng)景中需要用的就這兩個(gè),所以將這兩個(gè)流的編碼設(shè)置為utf-8,再次實(shí)驗(yàn),完美解決亂碼問(wèn)題。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-619781.html
參考
主要感謝下面這個(gè)文章的大神
修改控制臺(tái)輸入輸出以及錯(cuò)誤流的編碼提示文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-619781.html
到了這里,關(guān)于jenkins在windows上中文亂碼問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!