我目前正在编写一个应用程序,它需要我在任意窗口上调用 GetWindowText 并将该数据存储到文件中以供以后处理。长话短说,我注意到我的工具在战地 3 上失败了,我将问题缩小到窗口标题中的以下字符: http://www.fileformat.info/info/unicode/char/2122/index。 htm
所以我创建了一个小测试应用程序,它只执行以下操作:
std::wcout << L"\u2122";
低并且看,这会中断程序其余部分的控制台窗口的输出。
为什么当 MessageBoxW 等 API 很好地显示它时,MSVC STL 会在这个字符上窒息(我假设是其他字符)?
如何将这些字符打印到我的文件中?
在 Windows 7 x64 下在 VC10 和 VC11 上测试。
抱歉,帖子结构不佳,我在这里扯头发。
谢谢。
编辑:
最小测试用例
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
预期结果:“™”字符打印到控制台和文件。观察结果:文件已创建但为空。没有输出到控制台。
我已经确认我用于控制台的字体能够显示有问题的字符,并且文件肯定是空的(大小为 0 字节)。
编辑:
进一步调试显示在流中设置了“failbit”和“badbit”。
编辑:
我也尝试过使用 Boost.Locale,即使新的语言环境在全球范围内并明确地应用于所有标准流,我也遇到了同样的问题。