通过C ++程序在PowerShell中打印unicode字符

时间:2010-01-21 08:19:24

标签: unicode powershell

我的最终目标是通过C ++程序将一些非拉丁文本输出写入Windows中的控制台。

cmd.exe让我无处可去,所以我得到了最新的,有光泽的PowerShell版本(支持unicode)。我已经确认我可以

  • 输入非unicode字符和
  • 从windows命令(如“dir”)
  • 中查看非unicode控制台输出

例如,我有这个文件,“가.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: "?"
}

我不知道我错过了什么。我可以输入并在控制台上看到가的事实似乎表明我有三个需要的部分(unicode支持,字体和字形),但我必须弄错。

我也试过没有运气的“chcp”。我在C ++程序中做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:8)

来自printf docs:

  

wprintf和printf表现相同   如果以ANSI模式打开流。

查看此blog post。它有一个很好的简短的小清单:

#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;
}