对于以下 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 与此无关。