所以我想要打印版权符号,而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;
}