正如@interjay所指出的,以及维基百科上所写的:
“扩展ASCII”没有正式的定义,有时甚至会受到批评,因为它可能被错误地解释为美国国家标准学会(ANSI)已经更新了其ANSI X3.4-1986标准以包括更多字符,或者该术语标识了一个单一明确的编码,但实际情况并非如此。
维基百科:扩展ASCII
此外,当你将
printf("Â");
作为字符串使用时,你可以打印出 Â。因为你的编译器和终端都会将其解释为 Unicode 字符。你可以通过编译以下代码来验证:
#include <stdio.h>
int main() {
char c = 'Â';
printf("%c", c);
return 0;
}
在我的系统上,我的编译器给了我这个警告:
extended_ascii.c: In function ‘main’:
extended_ascii.c:4:18: warning: multi-character character constant [-Wmultichar]
4 | char c = 'Â'; // set single character variable to be Â
| ^~~
extended_ascii.c:4:18: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50050’ to ‘-126’ [-Woverflow]
这表明Â确实是一个Unicode多字节字符。
你也可以尝试运行这段代码来检查Â会被扩展成什么:
#include <stdio.h>
int main() {
char c[] = "Â";
for(int i = 0; c[i] != '\0'; i++) {
printf("%d ", c[i]);
}
return 0;
}
而且,它的输出是:
-61 -126
所以,你的Â是一个多字节字符,扩展到那些值。如果你尝试分别打印每个字符,你会再次看到��。因此,当它们一起打印时,终端会将其解释为一个Unicode字符并打印出期望的结果。
顺便说一句,我在互联网上也找到了这个:
在Windows-1252字符集中,ASCII码194由字符Â表示...
请注意使用了“Windows-1252字符集”这个词。虽然我对这个字符集一无所知,但导致194无法打印为Â的最有可能原因是您的终端不支持该字符集。