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

heL*_*maN 10 c bash graphics encoding utf-8

对于C中的以下代码:

char s[] = "????";
printf("%s", s);
Run Code Online (Sandbox Code Playgroud)

使用命令知道源文件是"UTF-8 Unicode C程序文本" file.

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

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

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

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

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

unw*_*ind 4

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

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

终端也有一个字符集,并且必须匹配,C 程序在打印时不执行任何进一步翻译字符串的操作,它们只是按原样打印,逐字节打印。如果终端没有设置为 UTF-8,你只会得到垃圾。

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