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