Печать символов Юникода в PowerShell с помощью программы на C ++ - PullRequest
4 голосов
/ 21 января 2010

Моя конечная цель - записать вывод нелатинского текста на консоль в Windows через программу на C ++.

cmd.exe ни к чему не приводит, поэтому я получил последнюю блестящую версию PowerShell (поддерживающую юникод). Я подтвердил, что могу

  • введите не-Unicode символы и
  • см. Вывод консоли не в Юникоде из команд Windows (например, "dir")

например, у меня есть этот файл, "가 .txt" (가 - первая буква в корейском алфавите), и я могу получить вывод, подобный этому:

PS P:\reference\unicode> dir .\가.txt

    Directory: P:\reference\unicode

Mode                LastWriteTime     Length  
Name                                                       
----                -------------     ------ 
----                                                       
-a---         1/12/2010   8:54 AM          0 가.txt     

Пока все хорошо. Но запись в консоль с использованием программы на C ++ не работает.

int main()
{
    wchar_t text[] = {0xAC00, 0}; // 가 has code point U+AC00 in unicode
    wprintf(L"%s", text);  // this prints a single question mark: "?"
}

Я не знаю, что мне не хватает. Тот факт, что я могу набрать и увидеть 가 на консоли, кажется, указывает на то, что у меня есть три необходимых компонента (поддержка юникода, шрифт и глиф), но я должен ошибаться.

Я также попробовал "chcp" без какой-либо удачи. Я что-то не так делаю в своей программе на C ++?

Спасибо!

1 Ответ

8 голосов
/ 21 января 2010

Из документов printf:

wprintf и printf ведут себя одинаково если поток открыт в режиме ANSI.

Проверьте это сообщение в блоге . У этого есть хороший короткий маленький список:

#include <fcntl.h>
#include <io.h>
#include <stdio.h>

int main(void) {
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
    return 0;
}
...