所以我想要打印版权符号,而putchar()只是截断字符中最重要的字节,从而产生一个不可打印的字符.
我使用的是Ubuntu MATE,我使用的编码是en_US.UTF-8.现在我所知道的是©的十六进制值是0xc2a9,当我尝试putchar('©' - 0x70)时,它给了我9,它的十六进制值为0x39,加上0x70,你将得到0xa9,这是最少的0xc2a9的有效字节
#include <stdio.h>
main()
{
printf("©\n");
putchar('©');
putchar('\n');
}
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
©
©
Run Code Online (Sandbox Code Playgroud)
而不是:
©
?
Run Code Online (Sandbox Code Playgroud)
该putchar函数接受一个int参数并将其强制转换unsigned char为打印它.所以你不能传递多字节字符.
您需要为putchar代码点中的每个字节调用两次.
putchar(0xc2);
putchar(0xa9);
Run Code Online (Sandbox Code Playgroud)
你可以尝试宽版本: putwchar
编辑:这实际上比我想象的要困难.这就是我需要它使它工作:
#include <locale.h>
#include <wchar.h>
#include <stdio.h>
int main() {
setlocale(LC_ALL, "");
putwchar(L'©');
return 0;
}
Run Code Online (Sandbox Code Playgroud)