В настоящее время я пишу приложение, которое требует от меня вызова 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.
Извинитеиз-за плохо сконструированного поста я тут рву свои волосы.
Спасибо.
РЕДАКТИРОВАТЬ:
Минимальный тестовый пример
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Ожидаетсярезультат: символ '™' напечатан на консоли и в файле.Наблюдаемый результат: файл создан, но пуст.Нет вывода на консоль.
Я подтвердил, что шрифт, который я использую для своей консоли, способен отображать соответствующий символ, и файл определенно пуст (размером 0 байт).
РЕДАКТИРОВАТЬ:
Дальнейшая отладка показывает, что 'failbit' и 'badbit' установлены в потоке (ах).
EDIT:
Я также пытался использоватьУ Boost.Locale и у меня такая же проблема даже с новой локалью, которая глобально и явно внедрена во все стандартные потоки.