PYTHONIOENCODING = UTF-8 引发的血案

血案:

我就是想在Jenkins上运行一段自动化python代码,就是最简单的本地控制台输出, 我就不懂了它为什么一直是去找 cp1252.py 编码???目前, 确定 pycharm 运行脚本很OK

File "D:\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 62-65: character maps to <undefined>

 

 

 

 

 

 

猜想和摸索:

1. 难道cmd 编码有问题?不能输出中文?

为此我找了一大批参考资料

1)计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor,添加Autorun = @chcp 65001>nul

2)cmd -> 属性 -> 字体改为 kaiti

cmd 能美美地显示中文了,python auto_test.py, 很OK。 但是Jenkins里还是报一样的错

 

2. Jenkins 自己编码有问题?

为此我又找了一大批参考资料。

jenkins.xml  添加 <env name="JAVA_TOOL_OPTIONS" value="-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"/>

Manage Jenkins -> System info 里,确保下面两项显示 UTF-8

然而,依旧没有用,报一样的错

 

  

 

 3. 我就和这个问题杠上了,我去pycharm里 看了一下我的settings->File encodings, 真有个可疑的 cp1252, 我也改成了utf-8

但是 pycharm 和 jenkins 毕竟没什么关系啊, 所以这个也没有用

 

 

4. PYTHONIOENCODING = UTF-8 

死马当活马医的最后,想想还是python 有点问题,因为jenkins运行python 脚本, 去找了 D:\Python37\lib\encodings\cp1252.py, 我怎么告诉它要去找 utf_8.py 呢?

查看了一些关于python的编码文章 —— 最终看到了环境变量 PYTHONIOENCODING

我选择加在 jenkins.xml里, <env name="PYTHONIOENCODING" value="UTF-8"/>

终于成功输出了中文!

折腾了4个小时。。。

如果你有更好的答案,请告诉我!

posted @ 2019-07-16 16:20  zhangyesmile  阅读(8337)  评论(0编辑  收藏  举报