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

时间:2016-02-26 09:13:12

标签: c bash encoding graphics utf-8

对于C:中的以下代码:

char s[] = "这个问题";
printf("%s", s);

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

编译后如何编码字符串? .out文件中还有utf-8吗?

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

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

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

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

1 个答案:

答案 0 :(得分:4)

假设GCC,this manual page表示预处理器将首先将传入文件的字符集转换为所谓的源字符集,其中gcc为UTF-8。因此对于UTF-8文件,没有任何反应。然后,默认的执行字符集用于字符串常量,默认情况下(对于GCC而言)也是UTF-8。

所以你的UTF-8字符串“幸存”并作为一堆UTF-8编码的字节存在于可执行文件中。

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

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