C 中的以下代码:
char s[] = "这个问题";
printf("%s", s);
通过file
命令知道源文件是“UTF-8 Unicode C 程序文本”。
编译后的字符串如何编码? .out 文件中也是 utf-8 吗?
二进制文件在bash中执行时,字符串在内存中是如何编码的?也是utf-8吗?
那么,bash 是如何知道编码方案并显示正确字符的呢?
最后,现在 bash 知道要显示什么了,但是如何将字节转换为屏幕上的像素?是否有一些从字节到像素的映射?
在所有这些过程中,是否有utf-8的编码或解码?
最佳答案
假设 GCC,this manual page表示预处理器将首先将传入文件的字符集转换为所谓的源字符集,对于 gcc 来说是 UTF-8。所以对于 UTF-8 文件,什么也不会发生。默认的执行字符集然后用于字符串常量,默认情况下是(同样,对于 GCC)UTF-8。
因此您的 UTF-8 字符串“幸存”并作为 UTF-8 编码的一堆字节存在于可执行文件中。
终端也有一个字符集,它必须匹配,C 程序在打印时不会进一步翻译字符串,它们只是按原样打印,逐字节打印。如果终端未设置为 UTF-8,您将得到垃圾。
正如我在评论中指出的那样,bash 与此无关。
关于c - utf-8 编码的字符串如何使用 printf 在 C 中打印到屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35647634/