所以我想打印版权符号,而putchar()只是切断了字符的最高有效字节,这导致了无法打印的字符。
我正在使用Ubuntu MATE,并且我使用的编码是en_US.UTF-8。 现在我知道的是©的十六进制值为0xc2a9,当我尝试putchar('©'-0x70)时,它得到的9的十六进制值为0x39,将0x70加到它上,您将得到最小的0xa9 0xc2a9的有效字节
#include <stdio.h>
main()
{
printf("©\n");
putchar('©');
putchar('\n');
}
我希望输出为:
©
©
而不是:
©
�
答案 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;
}