对于C:中的以下代码:
char s[] = "这个问题";
printf("%s", s);
知道该源文件是" UTF-8 Unicode C程序文本"使用file
命令。
编译后如何编码字符串? .out文件中还有utf-8吗?
当bash中执行二进制文件时,字符串如何在内存中编码?它也是utf-8吗?
然后,bash如何知道编码方案并显示正确的字符?
最后,现在bash知道要显示什么,但字节如何转换为屏幕上的像素?是否存在从字节到像素的映射?
在所有这些过程中,是否有utf-8的编码或解码?
答案 0 :(得分:4)
假设GCC,this manual page表示预处理器将首先将传入文件的字符集转换为所谓的源字符集,其中gcc为UTF-8。因此对于UTF-8文件,没有任何反应。然后,默认的执行字符集用于字符串常量,默认情况下(对于GCC而言)也是UTF-8。
所以你的UTF-8字符串“幸存”并作为一堆UTF-8编码的字节存在于可执行文件中。
终端也有一个字符集,并且必须匹配,C程序在打印时不会进一步翻译字符串,它们只是按字节打印。如果终端没有设置为UTF-8,你就会得到垃圾。
正如我在评论中指出的那样,bash与此毫无关系。