c不能正确打印“┌──┐”字符

下午好,我在c代码上面临一个问题,我不知道是什么原因造成的。

每当我尝试打印这样的字符:“┌──┐”我的程序只是打印一些奇怪的字符,就像这个截图:

我的终端输出的截图

我在Windows上使用Qt Creator,Qt版本为5.5.0,MSVC为64位。 编译器是Microsoft Visual C ++编译器12.0(amd64)。

我试图改变语言环境,但没有成功。 我发现打印这些字符的唯一方法是用ASCII代码将它们定义为intvariables并将它们打印出来,但这导致了一些非常广泛和难看的编码,如下所示:

int cSupEsq = 218; //'┌' int cSupDir = 191; //'┐' int cInfEsq = 192; //'└' int cInfDir = 217; //'┘' int mVert = 179; //'│' int mHor = 196; //'─' int espaco = 255; //' ' int letraO = 111; //'o' //Inicia limpando a tela da aplicação clrscr(); //Linha 1 printf("%c", cSupEsq); for (i = 1; i < 79; i++) { printf("%c", mHor); } printf("%c", cSupDir); 

有什么办法可以让程序正确处理这些字符? 什么可能导致这个问题?

Solutions Collecting From Web of "c不能正确打印“┌──┐”字符"

您使用OEM代码点的解决方案是正确的路要走,代码页850/437是控制台的默认代码页,因此应该工作。 您也可以使用SetConsoleOutputCP来确保控制台使用正确的代码页。

话虽如此,当你不使用你的解决方法时发生了什么事是源文件被保存使用不同的代码页,即。 而不是代码页850/437。 源代码在内存中的表示形式是Unicode(可能是UTF-8),当您将文件的内存表示形式映射到文件的目标代码页时。

你可以做的是以850/437代码页作为目标保存文件,我不知道你在Qt Creator中如何做(如果你可以的话),例如在Visual Studio中,你可以选择向下箭头在保存按钮上并选择“用编码保存”,然后可以继续在你的案例代码页850中选择目标代码页。这将确保内存代码点正确地映射到要编译的文件。

我希望能帮助解释这个问题。

不必一次打印一个字符。 相反,您可以使用转义序列:

 printf("\xDA\xBF\xC0\xD9\xB3\xC4\xFF");