【发布时间】:2012-04-09 04:23:30
【问题描述】:
我目前正在编写一个应用程序,该应用程序需要我在任意窗口上调用 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,即使新的语言环境在全球范围内并明确地应用于所有标准流,我也遇到了同样的问题。
【问题讨论】:
标签: c++ windows unicode stl wofstream