【发布时间】:2013-10-18 05:53:24
【问题描述】:
OutputDebugString()是本机ASCII,这意味着它在调用ASCII版本OutputDebugStringA()之前将输入的Unicode字符串转换为本地字符串。
有没有支持 Unicode 的 OutputDebugString() 的替代品?
【问题讨论】:
标签: windows debugging winapi unicode outputdebugstring
OutputDebugString()是本机ASCII,这意味着它在调用ASCII版本OutputDebugStringA()之前将输入的Unicode字符串转换为本地字符串。
有没有支持 Unicode 的 OutputDebugString() 的替代品?
【问题讨论】:
标签: windows debugging winapi unicode outputdebugstring
OutputDebugStringW 内部确实调用了OutputDebugStringA,因此无法在系统代码页中表示的Unicode 字符将被替换为?。
奇怪的是,调试器从操作系统接收到的用于打印消息的 OUTPUT_DEBUG_STRING_INFO 结构似乎支持让调试器知道字符串是否为 Unicode,只是 OutputDebugStringW 似乎没有使用它全部。
不幸的是,我不知道有一种机制可以让操作系统使用 Unicode 字符串引发 OUTPUT_DEBUG_STRING_EVENT。公共 API 可能无法实现。
【讨论】:
OutputDebugStringW 输出Unicode 字符串,而是只输出ASCII 字符串。要强制OutputDebugStringW 正确输出Unicode 字符串,调试器需要调用WaitForDebugEventEx 来选择新的行为。调用WaitForDebugEventEx 时,操作系统会知道调试器支持Unicode,并且特别选择接收Unicode 字符串" 使用最新的调试器