Если вы работаете в Windows, то я бы предложил использовать Unicode UTF-16 на границе Windows.
Мне кажется, что в Windows с Visual C ++ (по крайней мере до VS2015) std::cout
не может выводить текст с кодировкой UTF-8, но std::wcout
корректно выводит текст в кодировке UTF-16.
Этот скомпилированный фрагмент кода корректно выводит вашу строку, содержащую немецкие символы:
#include
#include
#include
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
// ü : U+00FC
// ß : U+00DF
const wchar_t * text = L"mit freundlichen Gr\u00FC\u00DFen";
std::wcout << text << L'\n';
}
Обратите внимание на использование строки wchar_t
с кодировкой UTF-16.
Вкл. более общее замечание, я бы предложил вам использовать кодировку UTF-8 (и, например, сохранить текст в std::string
s) в вашей кросс-платформенной C ++ части кода и преобразовать в UTF-16 -кодированный текст на границе Windows .
Для преобразования между UTF-8 и UTF-16 вы можете использовать Windows API, такие как MultiByteToWideChar
и WideCharToMultiByte
. Это API-интерфейсы C, которые можно безопасно и удобно упаковать в код C ++ (более подробную информацию можно найти в этой статье MSDN , и вы можете найти компилируемый код C ++ здесь, на GitHub ).