You need to enable JavaScript to run this app. Python写入当前窗口标题到文件的编码及base64转换报错问题求解
优惠活动
大模型
产品
解决方案
定价
更多

Python写入当前窗口标题到文件的编码及base64转换报错问题求解

问题解决方法

错误原因

  • 第一个UnicodeEncodeError错误:Windows系统默认写入文件使用GBK/CP1252等区域编码,无法编码窗口标题中包含的\u200e(左到右标记)这类Unicode特殊字符,指定UTF-8编码写入是正确的解决逻辑。
  • 第二个ValueError错误:base64是字节编码协议,仅接收字节类型输入,你直接将读取到的含非ASCII字符的Unicode字符串传入base64编码方法才会报错,和使用UTF-8写入文件无关。

可行方案

方案1:正确适配base64编码流程(保留完整窗口标题,推荐)

不需要修改写入文件的逻辑,仅调整base64编解码的调用方式即可,流程为:字符串转UTF-8字节→base64编码→解码为ASCII格式的base64字符串;还原时反向操作即可。
修改后的完整参考代码:

import win32gui
import time
import psutil
import win32process
import base64

i = 0
while i <= 1:
    time.sleep(2)
    w = win32gui
    q = w.GetWindowText(w.GetForegroundWindow())
    q = str(q)
    print(q)
    pid = win32process.GetWindowThreadProcessId(w.GetForegroundWindow())
    print(psutil.Process(pid[-1]).name())
    # 写入文件保留原编码
    with open("lolp.txt", 'w', encoding='utf-8') as f:
        f.write(q)
    
    # 读文件并做base64编码,无报错
    with open("lolp.txt", 'r', encoding='utf-8') as f:
        content = f.read()
    # 先转utf-8字节再做base64编码
    b64_encoded = base64.b64encode(content.encode('utf-8')).decode('ascii')
    print("base64编码结果:", b64_encoded)
    # 还原原始内容
    original_content = base64.b64decode(b64_encoded).decode('utf-8')
    print("还原后的窗口标题:", original_content)
    i += 1

方案2:过滤非ASCII字符(无需UTF-8编码,丢失特殊字符)

如果不需要保留完整的特殊字符,可以在获取窗口标题后直接过滤非ASCII内容,后续不管写入文件还是base64编码都不会报错:

q = w.GetWindowText(w.GetForegroundWindow())
# 用?替换无法编码为ASCII的字符,也可将replace改为ignore直接删除
q = q.encode('ascii', errors='replace').decode('ascii')
# 后续写入无需指定encoding参数,直接转base64也不会报错
with open("lolp.txt", 'w') as f:
    f.write(q)
b64_encoded = base64.b64encode(q.encode('ascii')).decode('ascii')

方案3:简单加密存储

你之前用的ROT13属于简单位移加密,安全性极低,如果需要更高的安全性同时方便解密,可以直接将UTF-8编码后的窗口标题字节做异或加密,或者直接使用base64编码结果作为简单混淆方案,比ROT13安全性更高,加解密逻辑也更简单。
注意:MD5是不可逆哈希算法,无法还原原始内容,不适合用于需要解密的加密场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:06:04