通过任务计划程序运行Python脚本时JSON文件出现乱码问题
解决Windows Server 2016任务计划运行Python脚本乱码问题
核心原因分析
你遇到的问题确实和Windows任务计划的区域/编码设置差异直接相关:用户登录时,任务使用当前用户的区域编码配置;而选择“无论用户是否登录都运行”时,任务会调用系统级默认编码,两者不一致就会触发字符处理异常。此外,脚本未明确指定编码、Python环境不统一也可能导致偶发乱码。
具体解决方案
1. 强制Python脚本使用UTF-8编码读写
在脚本中明确指定编码,彻底脱离系统默认编码的干扰:
- 写入JSON文件时:
import json # 明确指定utf-8编码,ensure_ascii=False保留非ASCII字符格式 with open("result.json", "w", encoding="utf-8") as f: json.dump(api_response_data, f, ensure_ascii=False, indent=2) - 调用API获取响应时,强制指定响应编码:
import requests response = requests.get("your_api_url") # 强制设置响应编码为utf-8(可根据API实际返回编码调整) response.encoding = "utf-8" api_response_data = response.json()
2. 统一任务计划的编码环境
修改任务计划的执行命令,先切换到UTF-8编码再运行脚本:
- 打开任务计划程序,找到目标任务,右键选择属性
- 切换到操作选项卡,点击编辑
- 在“程序或脚本”中填入
cmd,在“添加参数(可选)”中填入:
其中/c "chcp 65001 && C:\full\path\to\your\python.exe C:\full\path\to\your\script.py"chcp 65001是将命令行环境切换为UTF-8编码,后面需跟上完整的Python路径和脚本路径。
3. 统一系统与用户的区域编码
- 按
Win+R输入intl.cpl打开区域设置 - 切换到管理选项卡,点击更改系统区域设置
- 勾选Beta版:使用Unicode UTF-8提供全球语言支持,重启服务器
注意:此设置会影响系统全局程序的编码,建议先在测试环境验证后再应用到生产服务器。
4. 确保Python环境一致性
任务计划中使用的Python路径必须和你登录RDP时运行的Python完全一致:
- 登录服务器后,在命令行输入
where python获取完整路径 - 在任务计划的操作中,将“程序或脚本”设置为该完整路径(比如
C:\Python310\python.exe),避免调用系统默认的不同版本Python。
5. 避免文件写入不完整导致的乱码
采用“先写临时文件,再替换目标文件”的方式,防止半写入的文件被读取:
import json import os temp_file = "result.tmp.json" target_file = "result.json" # 写入临时文件 with open(temp_file, "w", encoding="utf-8") as f: json.dump(api_response_data, f, ensure_ascii=False) # 原子替换目标文件 os.replace(temp_file, target_file)
内容的提问来源于stack exchange,提问作者ltuandy
相关产品推荐
相关产品推荐

