В настоящее время я пишу приложение, которое требует, чтобы я вызывал GetWindowText в произвольных окнах и сохранял эти данные в файле для последующей обработки. Короче говоря, я заметил, что мой инструмент терпел неудачу на Battlefield 3, и я сузил проблему до следующего символа в названии окна: http://www.fileformat.info/info/unicode/char/2122/index.htm
Итак, я создал небольшое тестовое приложение, которое просто делает следующее:
std::wcout << L"\u2122";
Низкий и вот, что прерывает вывод в консольное окно для остальной части программы.
Почему MSVC STL задыхается от этого символа (и я предполагаю, что другие), когда API, такие как MessageBoxW и т.д., отображают его просто отлично?
Как я могу напечатать эти символы в моем файле?
Протестировано как на VC10, так и на VC11 под Windows 7 x64.
Извините за плохо построенный пост, я разрываю свои волосы здесь.
Спасибо.
EDIT:
Минимальный тестовый пример
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Ожидаемый результат: символ "™" печатается на консоль и файл. Наблюдаемый результат: Файл создан, но пуст. Нет вывода на консоль.
Я подтвердил, что шрифт, который я использую для моей консоли, способен отображать соответствующий символ, и файл определенно пуст (размером 0 байт).
EDIT:
Дальнейшая отладка показывает, что в потоке (потоках) установлены "failbit" и "badbit".
EDIT:
Я также пробовал использовать Boost.Locale, и у меня такая же проблема, даже с новой локалью, внедренной глобально и явно во все стандартные потоки.