Visual Studio — Как я могу печатать символы других языков в Microsoft C ++?

Мы можем напечатать любой английский символ с журналом, поставив «% c».
Возьми другой случай.
Раскладка клавиатуры была изменена.
Теперь я использую корейский / китайский язык.
Мы не можем просто поместить «% c» в журнал, чтобы напечатать эти символы.

Как мы можем достичь этого?

2

Решение

Как вы пишете в журнал? Если это 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 LATIN CAPITAL LETTER Z & U + 0303 КОМБИНИРОВАНИЕ TILDE == Z̃ (я не знаю, есть ли язык, который использует это как символ, но, кажется, нет объединенной формы для него.)

2

Другие решения

Как я понимаю, ваша проблема связана с использованием стандартных библиотек ввода / вывода C / C ++, поэтому основная проблема заключается в системе ввода-вывода — функции из stdio.h и потоки из iostream обеспечивают ввод в зависимости от локализации.

Если вы хотите запомнить (записать в журнал) нажатую клавишу, не принимая во внимание выбранный язык, я предлагаю использовать какой-то Windows API.
Сначала прочитайте о Ввод с клавиатуры в MSDN и посмотреть Коды виртуальных ключей.
Затем обратитесь к примерам обработки сообщения WM_KEYDOWN, например, в C ++ справочный форум.

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

Но если проблема заключается только в записи корейского файла, решение может быть в локализации и формате данных — рассмотрим следующий пример:

#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main(void)
{
// localization (perhaps needed for some computers)
setlocale(LC_CTYPE, "Korean");
// open log file for writing
FILE* outfile;
outfile = _wfopen( L"log.txt",L"wt+,ccs=UTF-16LE");
// test data
wchar_t wch = L'술';
// write one character to log file
fwrite(&wch, sizeof(wchar_t), 1, outfile);
// close file
fclose(outfile);

return 0;
}
1

По вопросам рекламы [email protected]