我写了一个小的c程序来打印对应于值129的扩展ASCII字符
#include<stdio.h>
int main(void)
{
char a = 129;
printf("%c\n",a);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
在bash终端上的unix机器(fedora 16)上编译并运行它.它给出了错误的显示.它在后面显示一个带有白色椭圆形背景的问号.
事实上,如果我把一个=任何超过126的东西,它显示相同的问号.
为什么这样以及如何纠正呢?
首先,我怀疑这是bash的错; bash只是找到你的程序并运行它,而实际显示程序的输出是你的终端应用程序的工作.其次,127以上没有ASCII字符.尝试打印128..255范围内的字符将发出一个具有给定值的字节,但该字节的显示方式由终端及其配置方式决定.最有可能的是,您的终端期望所有程序输出都以UTF-8编码; 为了向后兼容ASCII,所有小于128的字节都是UTF-8中的有效字符,但是当涉及字节128及以上时,只有某些序列有效,并且设置了高位的单个字节是错误的.尝试从单个程序按顺序打印字节226,152和131; 如果你看到一个雪人,你会知道你的终端正在使用UTF-8.
| 归档时间: |
|
| 查看次数: |
5774 次 |
| 最近记录: |