使用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
相关产品推荐
相关产品推荐

