如何解决Python传入终端波斯语参数触发的UnicodeEncodeError问题
波斯语终端传参UnicodeEncodeError修复方案
问题根因
报错'charmap' codec can't encode character本质是Windows终端默认使用非UTF-8的系统编码(比如CP1256、GBK),无法正确解析波斯语这类非拉丁字符的传参。你此前给参数加.encode("utf-8")的操作会把字符串转为bytes类型,如果make_a_call函数要求接收字符串参数,反而会引发额外的类型错误,需要先去掉这部分逻辑。
修复方案
- 临时单次修复
运行脚本前先在终端执行命令chcp 65001,将当前终端的编码临时切换为UTF-8,之后再正常运行Python脚本即可。 - 代码层面兼容修复
显式对终端传参做编码转码,保证读取到的是UTF-8格式的字符串,代码修改如下:import sys # 按终端原始编码读取参数后转成UTF-8字符串 tdf = sys.argv[1].encode(sys.stdin.encoding).decode("utf-8") print(make_a_call(tdf)) - 全局永久修复(适合经常处理多语言字符的场景)
- 运行脚本前先执行环境变量设置命令:
set PYTHONUTF8=1,强制Python全程使用UTF-8处理输入输出、命令行传参;或者直接用该命令启动脚本:PYTHONUTF8=1 python 你的脚本文件名.py "سلام خوبی؟" - 如需彻底解决Windows终端所有编码问题,可打开控制面板→区域→管理→更改系统区域设置,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启电脑后所有终端默认使用UTF-8编码,不会再出现同类报错。
- 运行脚本前先执行环境变量设置命令:
内容的提问来源于stack exchange,提问作者miladjurablu
相关产品推荐
相关产品推荐

