[英]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
•摆弄SetConsoleCP
和SetConsoleOutputCP
函数,但是我不知道如何利用它们来帮助我解决此问题。
•将Visual Studio->项目->项目属性..->字符集设置更改为每个可能的值。
•除了上述设置之外,还专门使用WriteConsoleOutputA
或WriteConsoleOutputW
•将带(/出)签名的源代码文件编码更改为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.