繁体   English   中英

将unicode(?)字符直接从源代码写入WriteConsoleOutput

[英]Writing unicode(?) character directly from source code to WriteConsoleOutput

我正在尝试使用WinApi中的WriteConsoleOutput将字符写入命令提示符窗口缓冲区。 关键是,我真的希望能够写的字符,如直接进入源代码,按原样,而不是使用某种类似的编码/符号的'\￿''0xFF' ,因为我不不太了解它们(代码页/字符集/等之间的差异)

下面的代码展示了我问题的最简单形式。 运行此代码不会在命令提示符窗口中显示 ,而是显示一个问号( ? )。

#include <Windows.h>

int main()
{
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    CHAR_INFO c[1] = {0};
    COORD cS = {1, 1};
    COORD cH = {0, 0};
    SMALL_RECT sr = {0, 0, 0, 0};

    c[0].Attributes = FOREGROUND_INTENSITY;
    c[0].Char.UnicodeChar = '☺';
    WriteConsoleOutput(h, c, cS, cH, &sr);
    Sleep(5000);
    return 0;
}

对于我的代码,无论安装/使用的是哪种语言,在所有Windows版本之间均等地显示输出是至关重要的。 因此,据我所知(这绝对是最小的),我需要设置一个特定的代码页(希望该代码页在任何语言的Windows中都可以由命令提示符支持)。

我试过了:
•从使用CHAR_INFO.UnicodeChar更改为CHAR_INFO.AsciiChar
•摆弄SetConsoleCPSetConsoleOutputCP函数,但是我不知道如何利用它们来帮助我解决此问题。
•将Visual Studio->项目->项目属性..->字符集设置更改为每个可能的值。
•除了上述设置之外,还专门使用WriteConsoleOutputAWriteConsoleOutputW
•将带(/出)签名的源代码文件编码更改为UTF-8。


在我的项目中,我以编程方式将命令提示符字体设置为8x8 Terminal,据我所知,它不支持实际的unicode字符。 可用字符显示在此处 这些字符的确包含“☺”,因此我不确定我的问题是否与Unicode有关。 我不知道了 请帮忙。

C源只能是ascii。 如果将非ASCII字符嵌入C源文件中,并且IDE可能会以看起来正确的格式显示它们,但是编译器很可能会以不同的方式对待它们,并且传递给它们的可执行函数仍然可以以不同的方式对待它们。 它不是便携式的或可靠的。 但是您可以使用转义序列\\ x将任意字节嵌入C字符串中。

UTF-8适合内部使用,但是Windows API尚不支持它,因此您需要转换为Windows 16位字符(UTF-16差不多但不太完全),以显示扩展字符。 但是,您必须确保正在调用Windows API的宽字符版本。 大多数采用字符串的Windows API函数都有A和W版本(ascii和wide),以实现二进制向后兼容性。 如果您在IDE中查询标识符(转到定义等),则应查看所使用的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM