如何使用printf将utf-8编码字符串打印到C中的屏幕上?

如何使用printf将utf-8编码字符串打印到C中的屏幕上?,c,bash,encoding,graphics,utf-8,C,Bash,Encoding,Graphics,Utf 8,对于以下C代码: char s[] = "这个问题"; printf("%s", s); 使用file命令知道源文件是“UTF-8 Unicode C程序文本” 编译后字符串是如何编码的?是否在.out文件中也包含utf-8 在bash中执行二进制文件时,字符串在内存中是如何编码的?它也是utf-8吗 那么,bash如何知道编码方案并显示正确的字符呢 最后,现在bash知道要显示什么,但是如何将字节转换为屏幕上的像素?是否存在从字节到像素的映射 在所有这些过程中,是否存在utf-8的任何编码或

对于以下C代码:

char s[] = "这个问题";
printf("%s", s);
使用
file
命令知道源文件是“UTF-8 Unicode C程序文本”

编译后字符串是如何编码的?是否在.out文件中也包含utf-8

在bash中执行二进制文件时,字符串在内存中是如何编码的?它也是utf-8吗

那么,bash如何知道编码方案并显示正确的字符呢

最后,现在bash知道要显示什么,但是如何将字节转换为屏幕上的像素?是否存在从字节到像素的映射

在所有这些过程中,是否存在utf-8的任何编码或解码?

假设GCC,表示预处理器将首先将传入文件的字符集转换为所谓的源字符集,对于GCC,源字符集是utf-8。因此,对于UTF-8文件,什么都不会发生。然后,默认执行字符集用于字符串常量,默认情况下,也就是(对于GCC)UTF-8

因此,您的UTF-8字符串“幸存”并以UTF-8编码中的一组字节存在于可执行文件中

终端也有一个字符集,必须匹配,C程序在打印字符串时不会进一步翻译字符串,它们只是按原样逐字节打印。如果终端未设置为UTF-8,则只会收到垃圾


正如我在评论中指出的,bash与此无关。

这正是问题所在。请注意,bash、命令解释器shell和终端仿真器(显示文本的窗口)不是一回事。您的程序不与bash通信,它只是在与bash相同的终端上运行(假设bash是您使用的shell)。因此,终端映射到一个文件,可执行文件在io中断的情况下将字节写入该文件。终端可以被视为一个设备,将字节映射到像素。是吗?字节到像素的映射由图形驱动程序完成。