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

使用ctypes.windll.kernel32.SetConsoleTitleW设置标题为何显示为中文?

为什么调用SetConsoleTitleW后控制台标题显示成中文了?

嘿,这个问题我之前也踩过坑!其实核心原因是Windows API的宽字符版本和ctypes的默认参数处理不兼容,导致编码转错了,才出现了莫名其妙的中文乱码。

具体来说:

  • SetConsoleTitleW是Windows专门用来处理Unicode字符串的宽字符版本API,它要求传入的是UTF-16编码的宽字符(每个字符占2字节)。
  • 但你直接传Python字符串的时候,ctypes默认会把字符串转换成系统默认的ANSI编码字节串(比如中文Windows里是GBK),然后把这个字节串当作宽字符来解析。
  • 你的"Test"是四个ASCII字符,每个只占1字节,总共4字节。被当作UTF-16宽字符时,会被拆成两个2字节的单元,这两个单元对应的GBK编码正好是中文汉字(比如常见的“烫”“屯”这类乱码),所以控制台就显示出中文了。

给你两个简单的解决办法:

方法一:让ctypes正确识别宽字符参数

给SetConsoleTitleW明确指定参数类型为宽字符指针,这样ctypes就会把Python字符串正确转换成UTF-16宽字符传递给API:

import ctypes
kernel32 = ctypes.windll.kernel32
# 声明函数的参数类型是宽字符指针
kernel32.SetConsoleTitleW.argtypes = [ctypes.c_wchar_p]
Title = "Test"
kernel32.SetConsoleTitleW(Title)

方法二:改用ANSI版本的API

如果你的标题只用到ASCII字符,直接调用ANSI版本的SetConsoleTitleA就行,它会自动适配系统默认编码:

import ctypes
Title = "Test"
ctypes.windll.kernel32.SetConsoleTitleA(Title)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:03