c - utf-8 编码的字符串如何使用 printf 在 C 中打印到屏幕?

标签 c bash encoding graphics utf-8

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/

相关文章:

c - 尝试在整数数组中复制命令行参数时出现段错误

c - 如何关闭文件?

arrays - 日期转换程序中的奇怪错误

bash - 对某些目录 makefile 中的文件进行简单循环

bash - 不会记住在 while 循环内修改的变量

java - 当我将 maven java 编译器插件从 1.5 更改为 1.6 时,为什么我会得到一个不可映射的字符来编码 UTF-8?

json - 如何转义 JSON 字符串以进行 CSV 解析?

c - 抽象结构体数组

json - curl:JSON 中的意外标记

java - 使用 Jetty Websockets 的通用编码器和解码器