在Python 3中无法获取Microsoft Edge窗口标题的问题求助
解决win32gui获取Edge窗口标题时的UnicodeEncodeError问题
问题根源是Windows默认控制台编码为GBK,而Edge窗口标题中包含了GBK无法编码的零宽度空格字符(\u200b,肉眼不可见),导致print输出时触发编码错误。以下是几种可行的解决办法:
方法1:修改print输出的编码处理逻辑
直接在输出时指定错误处理方式,忽略或转义无法编码的字符:
import win32gui as w import time while True: time.sleep(1) titleName = w.GetWindowText(w.GetForegroundWindow()) # 忽略无法编码的字符 print(titleName.encode('gbk', errors='ignore').decode('gbk')) # 或者用转义方式显示特殊字符 # print(titleName.encode('gbk', errors='backslashreplace').decode('gbk'))
方法2:将控制台编码改为UTF-8
方式A:代码内修改输出编码(Python3.7+支持)
在代码开头添加配置,把stdout的编码设为UTF-8:
import sys import win32gui as w import time sys.stdout.reconfigure(encoding='utf-8') while True: time.sleep(1) titleName = w.GetWindowText(w.GetForegroundWindow()) print(titleName)
方式B:控制台手动切换编码
运行脚本前,在Windows控制台执行以下命令,将编码切换为UTF-8(代码页65001):
chcp 65001
之后再运行你的Python脚本,即可正常输出包含特殊字符的标题。
方法3:提前过滤无法编码的字符
获取标题后,过滤掉GBK编码不支持的字符,只保留常见的中文和ASCII字符:
import win32gui as w import time import re while True: time.sleep(1) raw_title = w.GetWindowText(w.GetForegroundWindow()) # 过滤掉非中文、非ASCII的字符 titleName = re.sub(r'[^\x00-\x7F\u4E00-\u9FFF]', '', raw_title) print(titleName)
内容的提问来源于stack exchange,提问作者Danhui Xu
相关产品推荐
相关产品推荐

