Я не могу ввести десятичное значение, когда я так кодирую, есть ли другой способ получить результат?

Если вы работаете в 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 ).

0
задан Akhil Nair 19 January 2019 в 11:57
поделиться