Ошибка вывода потока Windows Unicode C++

В настоящее время я пишу приложение, которое требует, чтобы я вызывал 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 
#include 

int main()
{
  {
    std::wofstream test_file("test.txt");
    test_file << L"\u2122";
  }

  std::wcout << L"\u2122";
}

Ожидаемый результат:Символ '™' выводится на консоль и в файл. Наблюдаемый результат:Файл создан, но пуст. Нет вывода на консоль.

Я подтвердил, что шрифт, который я использую для своей консоли, способен отображать рассматриваемый символ, и файл определенно пуст (0 байтов размером).

РЕДАКТИРОВАТЬ:

Далее отладка показывает, что 'failbit' и 'badbit' установлены в потоке (s ).

РЕДАКТИРОВАТЬ:

Я также пытался использовать Boost.Locale, и у меня такая же проблема даже с новым локаль глобально и явным образом внедрена во все стандартные потоки.

11
задан ST3 14 September 2013 в 19:32
поделиться