为什么 putchar() 不输出版权符号而 printf() 输出版权符号?

Why doesn't putchar() output the copyright symbol while printf() does?

所以我想打印版权符号,而 putchar() 只是截断了导致无法打印字符的字符的最重要字节。

我正在使用 Ubuntu MATE,我使用的编码是 en_US.UTF-8。 现在我所知道的是 © 的十六进制值是 0xc2a9,当我尝试 putchar('©' - 0x70) 它给了我 9,它的十六进制值为 0x39 添加 0x70 到它,你会得到 0xa9 这是最少的0xc2a9

的重要字节
#include <stdio.h>

main()
{
    printf("©\n");
    putchar('©');
    putchar('\n');

}

我希望输出为:

©
©

而不是:

©
�

putchar 函数接受一个 int 参数并将其 转换为 unsigned char 以打印它 。所以你不能给它传递一个多字节字符。

您需要调用 putchar 两次,代码点中的每个字节一次。

putchar(0xc2);
putchar(0xa9);

您可以试试宽版:putwchar

编辑:这其实比我想象的要难。这是我需要让它工作的东西:

#include <locale.h>
#include <wchar.h>
#include <stdio.h>

int main() {
        setlocale(LC_ALL, "");
        putwchar(L'©');
        return 0;
}