Рассмотрим следующий фрагмент кода, скомпилированный как консольное приложение в MS Visual Studio 2010/2012 и выполненный на Win7:
#include "stdafx.h"
#include <iostream>
#include <string>
const std::wstring test = L"hello\xf021test!";
int _tmain(int argc, _TCHAR* argv[])
{
std::wcout << test << std::endl;
std::wcout << L"This doesn't print either" << std::endl;
return 0;
}
Первая инструкция wcout выводит "привет" (вместо "hello? test!" ) Второй вывод wcout ничего не выводит.
Как будто 0xf021 (и другие?) символы Unicode приводят к сбою wcout.
Этот конкретный символ Юникода, 0xf021 (закодированный как UTF-16), является частью "Частной области использования" на базовой многоязычной плоскости. Я заметил, что приложения Windows Console не имеют расширенной поддержки символов Unicode, но обычно каждый символ, по крайней мере, представлен символом по умолчанию (например, "?" ), Даже если нет поддержки для отображения определенного глифа.
Что вызывает подавление потока wcout? Есть ли способ reset после входа в это состояние?