遇到 UnicodeEncodeError: ‘charmap’ codec can’t encode character 的问题解决

在 Windows 上运行 Python 脚本时,如果遇到 UnicodeEncodeError: 'charmap' codec can't encode character 的问题,这是因为 Windows 控制台默认使用 cp1252 编码,无法正确处理非 ASCII 字符(如中文)。你可以通过以下几种方式来解决这个问题:

  • 方法 1:在 Python 脚本中设置标准输出为 UTF-8
    在 Python 脚本中设置标准输出(stdout)和标准错误输出(stderr)为 UTF-8 编码,这样就可以正确打印中文字符了。你可以在脚本的开头添加以下代码:
python 复制代码
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
  • 方法 2:更改 Windows 控制台的编码为 UTF-8
    可以将 Windows 控制台的编码更改为 UTF-8,这样所有输出都会以 UTF-8 编码的方式进行处理。你可以在运行 Python 脚本之前执行以下命令:
batch 复制代码
chcp 65001

chcp 65001 将控制台的代码页设置为 UTF-8。你可以将这个命令写入一个批处理文件 (.bat),以便在运行 Python 脚本前自动设置编码。

  • 方法 3:使用 PYTHONIOENCODING 环境变量
    你也可以通过设置环境变量 PYTHONIOENCODING 来强制 Python 使用 UTF-8 编码。这样可以确保所有输出在默认情况下都使用 UTF-8 编码。你可以通过以下方式设置环境变量:

临时设置:

在命令行中运行以下命令来设置环境变量:

batch 复制代码
set PYTHONIOENCODING=utf-8

永久设置:

你可以通过 Windows 系统的环境变量设置,永久性地设置 PYTHONIOENCODING。

右键点击"此电脑"或"我的电脑",选择"属性"。

选择"高级系统设置"。

点击"环境变量"按钮。

在"系统变量"或"用户变量"下点击"新建",输入变量名 PYTHONIOENCODING,变量值 utf-8,然后保存。

  • 方法 4:使用 encode 和 decode 方法处理字符串
    在 Python 脚本中使用 encode 和 decode 方法处理字符串,确保字符串在输出前被正确编码:
python 复制代码
print("但是".encode('utf-8').decode('utf-8'))

这种方法确保字符串在输出前按照正确的编码进行处理,但通常不需要这样做,前面的方法更简单和直接。

示例

假设你有一个简单的 Python 脚本 test.py

python 复制代码
# test.py
print("你好,世界!")
在执行这个脚本之前,可以使用以下命令:
batch 复制代码
chcp 65001
python test.py

这样就可以正确地在控制台输出中文字符了。

要在Jenkins中调用Python脚本打印中文并避免UnicodeEncodeError,可以按照以下步骤在Windows上进行永久设置:

1. 更改系统区域设置为UTF-8

这是解决Python在Jenkins中输出中文乱码的最彻底的方法:

复制代码
打开控制面板:

转到时钟和区域 > 区域。
进入"管理"选项卡:

点击管理选项卡。
点击更改系统区域设置...。
启用UTF-8:

勾选Beta: 使用Unicode UTF-8提供全球语言支持。
重启计算机:

完成后,重新启动计算机以应用更改。
2. 为Jenkins设置环境变量

如果无法更改系统区域设置,可以专门为Jenkins设置环境变量:

打开Jenkins任务配置:

复制代码
进入你运行脚本的Jenkins任务配置页面。
添加环境变量:

在构建环境部分,添加一个新环境变量:
名称: PYTHONIOENCODING
值: utf-8
这样可以确保Python在通过Jenkins运行时使用UTF-8进行输入输出编码。
  1. 在Python脚本中设置编码
    在Python脚本的开头添加以下代码,以确保脚本在输出时使用UTF-8编码:
python 复制代码
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
4. 在Jenkinsfile中指定UTF-8编码

还可以通过在Jenkinsfile中明确指定Python使用UTF-8编码来执行脚本:

bash 复制代码
python -X utf8 your_script.py

这样可以强制Python在UTF-8模式下运行,确保正确处理中文字符。

总结

通过更改系统区域设置为UTF-8,或者为Jenkins设置环境变量,Python脚本在Jenkins中打印中文时不再出现UnicodeEncodeError。这将有效解决中文字符输出的问题。

相关推荐
蹦蹦跳跳真可爱58927 分钟前
Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)
人工智能·python·机器学习
蓝莓味柯基5 小时前
Python 学习路线与笔记跳转(持续更新笔记链接)
笔记·python·学习
唤醒手腕6 小时前
2025 年如何使用 Pycharm、Vscode 进行树莓派 Respberry Pi Pico 编程开发详细教程(更新中)
ide·python·pycharm
reasonsummer6 小时前
【办公类-99-04】20250504闵豆统计表excle转PDF,合并PDF、添加中文字体页眉+边框下划线
python·pdf·deepseek
CHNMSCS6 小时前
PyTorch_张量基本运算
人工智能·pytorch·python
时而支楞时而摆烂的小刘6 小时前
CUDA、pytorch、配置环境教程合集
人工智能·pytorch·python
Gui林7 小时前
【ROS2】launch启动文件如何集成到ROS2(Python版本)
linux·python
奋进的小暄7 小时前
数据结构(4) 堆
java·数据结构·c++·python·算法
gorgor在码农9 小时前
Pytorch-CUDA版本环境配置
人工智能·pytorch·python
大G哥10 小时前
用 Java 和 DL4J 实现验证码识别系统
java·linux·开发语言·前端·python