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

时间:2019-02-17 04:38:43

标签: c linux putchar

所以我想打印版权符号,而putchar()只是切断了字符的最高有效字节,这导致了无法打印的字符。

我正在使用Ubuntu MATE,并且我使用的编码是en_US.UTF-8。 现在我知道的是©的十六进制值为0xc2a9,当我尝试putchar('©'-0x70)时,它得到的9的十六进制值为0x39,将0x70加到它上,您将得到最小的0xa9 0xc2a9的有效字节

#include <stdio.h>

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

}

我希望输出为:

©
©

而不是:

©
�

2 个答案:

答案 0 :(得分:7)

putchar函数接受一个int参数,并将其广播到unsigned char进行打印。因此,您不能将其传递为多字节字符。

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

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

答案 1 :(得分:5)

您可以尝试使用宽版本:putwchar

编辑:实际上,这比我想象的要难。这是使它工作所需的条件:

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

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