You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pywinauto导出控件标识到文件报UnicodeEncodeError如何解决

问题原因

报错是因为print_control_identifiers传入filename参数时,内部会使用Windows系统默认的cp1252编码打开文件,无法编码控件文本中包含的Unicode特殊字符(比如你遇到的▼符号),导致写入流程中断,后续内容丢失。

解决方案

有两种稳定的实现方式,都可以完整导出所有控件标识:

方案1:自定义日志输出函数(推荐)

直接利用方法内置的log_func参数,自己控制写入逻辑,使用UTF-8编码写入文件:

import codecs

# 以UTF-8编码创建输出文件
with codecs.open("page_contents.txt", "w", encoding="utf-8") as f:
    # 自定义日志回调,把输出内容写入文件
    def write_log(msg):
        f.write(f"{msg}\n")
    # 调用时传入自定义日志函数,不要传filename参数
    handle.print_control_identifiers(log_func=write_log)

方案2:重定向标准输出

如果你不想修改方法的调用参数,可以直接把控制台输出重定向到UTF-8编码的文件:

import sys
from contextlib import redirect_stdout

# 打开UTF-8编码的文件,增加errors参数可避免极端情况的编码报错
with open("page_contents.txt", "w", encoding="utf-8", errors="replace") as f:
    with redirect_stdout(f):
        # 直接调用方法,所有控制台输出会自动写入文件
        handle.print_control_identifiers()
说明

两种方案导出的内容和控制台打印的控件标识完全一致,后续你可以直接读取文件内容做正则匹配等后续处理。如果需要兼容非UTF-8的编辑器打开文件,可以把编码换成utf-8-sig,Windows下的记事本等软件可以正常识别。

内容的提问来源于stack exchange,提问作者user3455595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:27:00