将jenkins的window运行节点设置为utf-8格式以及修改python读取到的编码为utf-8

问题汇总与解答

问题1

在jenkins的window控制节点上修改编码为utf-8,并输出中文信息,结果显示为乱码

原因

window节点的环境变量未设置正确,节点信息显示为GBK编码

解决方法

在节点中添加环境变量之后启动agent进行连接,JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

再次查看节点编码为UTF-8

命令行输出中文字体为正常文字

问题2

python程序读取到的编码为gbk,与之前更改后的编码不一致导致中文乱码

原因

python默认读取系统的本地编码,故即使cmd编码改变,但系统的编码未改变,所以修改cmd的编码并不能影响python读取到的编码格式

解决方法

运行程序前使用set PYTHONUTF8=1是python的程序的编码始终为utf-8的格式

测试用job配置

job配置

:: 修改编码为UTF-8
chcp 65001
:: 设置python读取的编码始终为UTF-8
set PYTHONUTF8=1
:: 创建虚拟环境
python -m venv venv
:: 拷贝测试脚本
copy ..\..\learn_invoke.py .
:: 使用虚拟环境运行测试脚本
.\venv\Scripts\activate.bat && pip install invoke -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple && python learn_invoke.py

测试脚本

import io
import sys

import invoke


def main():
    print(f"当前终端编码为: 输入({sys.stdin.encoding}),输出({sys.stdout.encoding})")
    command = 'echo "你好,世界!!!"'
    return invoke.run(command=command)


if __name__ == "__main__":
    main()