C-输出中未正确显示字符
我可以在我的源代码中插入C-输出中未正确显示字符,c,character,C,Character,我可以在我的源代码中插入è字符,但这在我的程序的输出中没有正确显示;此时会出现Þ字符 ASCII扩展码中的è字符对应于138 Unicode中的è字符与232数字匹配 ASCII扩展码中的Þ字符对应于232数字 Unicode中的Þ字符与222数字匹配 通过调试器,可以注意到编译器将è转换为数字232,并将整数138转换为字符Š(行列表集),在输出中,字符号232表示为Þ,字符号138表示为è 幕后发生了什么 示例代码: #include <stdio.h> int main (v
è
字符,但这在我的程序的输出中没有正确显示;此时会出现Þ
字符
ASCII扩展码中的è
字符对应于138
Unicode中的è
字符与232
数字匹配
ASCII扩展码中的Þ
字符对应于232
数字
Unicode中的Þ
字符与222
数字匹配
通过调试器,可以注意到编译器将è
转换为数字232
,并将整数138
转换为字符Š
(行列表集),在输出中,字符号232
表示为Þ
,字符号138
表示为è
幕后发生了什么
示例代码:
#include <stdio.h>
int main (void)
{
unsigned char a = 'è';
unsigned char b = 138;
printf ("Char a:% c \ n", a);
printf ("Char a:% d \ n \ n", a);
printf ("Char b:% c \ n", b);
printf ("Char b:% d \ n \ n", b);
return 0;
}
Char a: Þ
Char to: 232
Char b: 'è'
Char b: 138
char a = 232 'è'
char b = 138 'Š'
调试器看到的内容:
#include <stdio.h>
int main (void)
{
unsigned char a = 'è';
unsigned char b = 138;
printf ("Char a:% c \ n", a);
printf ("Char a:% d \ n \ n", a);
printf ("Char b:% c \ n", b);
printf ("Char b:% d \ n \ n", b);
return 0;
}
Char a: Þ
Char to: 232
Char b: 'è'
Char b: 138
char a = 232 'è'
char b = 138 'Š'
我猜你在窗户上 您的源代码是Unicode,因此
è
字符被编码为数字232。编译器在生成的程序中使用此值
执行程序时,此代码将作为参数发送到printf
函数,但由于Windows使用扩展ASCII,因此在控制台中打印时将其解释为Þ
您可以用扩展ASCII编码文件,使其具有正确的字符
要确定控制台使用的编码,可以在Windows中使用:
#include <windows.h>
unsigned cp = GetConsoleOutputCP();
#包括
无符号cp=GetConsoleOutputCP();
您可以使用以下命令更改控制台编码:
#include <windows.h>
SetConsoleOutputCP(1252); //Set console encoding to Windows 1252
SetConsoleOutputCP(65001); //Set console encoding to utf8
#包括
SetConsoleOutputCP(1252)//将控制台编码设置为Windows 1252
设置控制台输出端口CP(65001)//将控制台编码设置为utf8
这将设置控制台输出而不是控制台输入,因此如果需要处理扩展ASCII用户输入,则需要使用并设置输入编码
您可以看到其他可用的代码页代码。只需检查是否要写入:
printf("%d\n\n", 'è');
然后您将看到字符不足以包含正确的值。源代码的字符代码是什么?您是否收到“实现定义的多字符文字”之类的编译器警告?我没有收到任何警告消息,我不知道我的“源字符代码”到底是什么。但在“编辑器>编码设置”部分的IDE代码::块的设置中,我找到了“WINDOWS-1252”条目启用项,我正在使用WINDOWS。在“编辑器>编码设置”部分的“我的IDE代码::块的设置”中,我发现“WINDOWS-1252”项已启用。是否可以打印
unsigned cp=GetConsoleOutputCP()的结果
查看我收到一条消息错误:'GetConsoleOutputCP'未在此范围内声明“
是的,您应该包括windows。h我忘了提及它。抱歉:#include
如果执行该语句,我会得到850
的结果,但我认为不会发生这种情况,因为char不能保存è
值,但是因为整数在printf
中被解释为由%d
签名。如果我的char
变量被声明为unsigned
,则它可以保存并显示扩展ASCII表中的所有字符,直到255
。