UiPath调用PowerShell执行Python脚本出现编码错误:é显示为Ú
UiPath Invoke PowerShell执行Python脚本特殊字符乱码解决方法
问题核心
在UiPath中通过Invoke Power Shell(IsScript设为True)执行python '/path/to/my/script.py',输出字符串出现乱码:系统PowerShell中正常显示Cédric,UiPath中变为CÚdric。
排查确认:
- 系统PowerShell默认编码为「Western Europe (Windows)」(即Windows-1252),UiPath调用的PowerShell默认编码为「Unicode (UTF-8)」
- Windows-1252中
é的十六进制为E9,CP850编码中E9对应Ú,乱码源于Python输出编码与UiPath侧PowerShell读取编码不匹配
限制条件:
- 无法使用UiPath的
Invoke Python Script活动(功能损坏) - 必须保留现有Python脚本
- 拒绝逐个字符替换的临时方案,需从编码逻辑彻底解决
可行解决方案
方案1:强制Python输出UTF-8编码
Python会自动适配当前控制台编码输出,UiPath的PowerShell环境编码与系统控制台不一致,可强制Python输出UTF-8,匹配UiPath侧编码:
子方案A:修改Python脚本
在Python脚本开头添加代码,强制标准输出使用UTF-8:
import sys sys.stdout.reconfigure(encoding='utf-8')
子方案B:通过PowerShell环境变量指定
无需修改Python脚本,在Invoke PowerShell的脚本开头添加环境变量设置:
$env:PYTHONIOENCODING="utf-8" python '/path/to/my/script.py'
PYTHONIOENCODING会强制Python的输入/输出/错误流使用指定编码,确保输出与UiPath侧PowerShell编码匹配。
方案2:调整PowerShell的输入输出编码
将UiPath中PowerShell的编码改为系统控制台一致的Windows-1252,确保读取Python输出时编码匹配:
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(1252) [Console]::InputEncoding = [System.Text.Encoding]::GetEncoding(1252) python '/path/to/my/script.py'
1252是Windows-1252的编码ID,设置后PowerShell会以对应编码解析Python输出的字节流。
方案3:UiPath中手动转换编码
若上述方案无效,可直接在UiPath中处理字节数组转编码:
- 将
Invoke Power Shell活动的Output变量类型改为System.Byte[](默认是字符串,需手动修改) - 添加
Assign活动,将字节数组转换为Windows-1252编码的字符串:
其中correctString = System.Text.Encoding.GetEncoding(1252).GetString(powerShellOutputBytes)powerShellOutputBytes是Invoke Power Shell的输出变量,correctString为最终正确字符串。
内容的提问来源于stack exchange,提问作者PhoenixizFire
相关产品推荐
相关产品推荐

