Как вы пишете в журнал? Если это printf
, я предлагаю переключиться на wprintf
и убедиться, что ваш ввод с клавиатуры считывается в wchar_t. Затем вы можете использовать %lc
, чтобы распечатать своего персонажа.
Единственная небольшая загвоздка в том, что некоторые китайские иероглифы даже не помещаются в один wchar_t
(те, которые содержат символы Unicode U+10000 и выше). Для них вам придется читать массив wchar_t
(или std::wstring
) и печатать с помощью %ls
.
Примечание. Стандарт на самом деле не указывает, насколько большим является wchar_t
, а на платформах Unix wchar_t
обычно является 32-битным, поэтому он может содержать любую одиночную кодовую точку Unicode как одно значение UTC-4. Windows-NT была разработана до того, как стало очевидно, что 65536 символов недостаточно, поэтому API использовал символы UTC-2. Когда Unicode был расширен до миллиона символов, было бы слишком сложно изменить размер символов, принимаемых API, поэтому они были преобразованы для приема UTF-16. Для взаимодействия с этими API-интерфейсами wchar_t
на платформах Windows обычно является значением UTF-16.
Конечно, даже если wchar_t
достаточно велико для кодовой точки, это не помогает, когда «символ» занимает более одной кодовой точки. Например, U+005A ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА Z и U+0303 ОБЪЕДИНЕНИЕ ТИЛЬДЫ == Z̃ (я не знаю, есть ли язык, который использует это как символ, но, похоже, для него не существует комбинированной формы.)
person
Martin Bonner supports Monica
schedule
22.12.2015
printf
? Почему бы не использовать безопасные по типу потоки ввода-вывода, поскольку этоC++
? - person James Adkison   schedule 22.12.2015