╧╤;和╪;在Windows 7 cmd控制台上显示错误

╧╤;和╪;在Windows 7 cmd控制台上显示错误,cmd,windows-7,Cmd,Windows 7,我有一个python脚本,它使用扩展的ASCII字符代码179-218(更具体地说是179)将表绘制到控制台输出(│), 185(╣), 186(║), 187(╗), 188(╝), 200(╚), 201(╔), 202(╩), 203(╦), 204(╠), 205(═), 206(╬), 207(╧), 209(╤) 和216(╪). 我在Windows 10和Windows 7机器上运行脚本。在Windows 10机器上,所有内容都显示良好,但当我在Windows 7机器上运行脚本时,

我有一个python脚本,它使用扩展的ASCII字符代码179-218(更具体地说是179)将表绘制到控制台输出(│), 185(╣), 186(║), 187(╗), 188(╝), 200(╚), 201(╔), 202(╩), 203(╦), 204(╠), 205(═), 206(╬), 207(╧), 209(╤) 和216(╪).

我在Windows 10和Windows 7机器上运行脚本。在Windows 10机器上,所有内容都显示良好,但当我在Windows 7机器上运行脚本时,它不会显示209字符(╤), 207(╧) 和216(╪) 正确。当我复制粘贴字符到记事本和记事本++时,它显示正确,并且直接在其他位置键入这些字符也可以。当我直接在控制台键入字符时,也会发生同样的情况,我得到了错误的字符。如下所示:


原因是什么?有没有办法解决这个问题?

有两个可能的原因:

  • Python脚本中用于的代码页与Windows命令处理器用于控制台的代码页不同。
    默认情况下,
    cmd.exe
    使用的代码页取决于为所用帐户配置的地区/国家/地区。通过打开并运行命令
    chcp
    ,可以查看自己用户帐户的所用代码页。如果此代码页支持完全不正确显示的字符,则可以在Wikipedia或其他网站上查找该代码页

  • 使用的控制台字体不支持该代码页字符编码

  • 以下关于堆栈溢出的回答可能有助于理解此问题:

    Windows 7上的console与Windows 8/8.1/10上的console之间的默认差异是默认使用的字体,不能使用更改批处理文件中的字体

    因此,我建议比较Windows 7和Windows 10上
    cmd.exe
    使用的代码页。根据用户帐户配置的国家/地区,在两个Windows使用的相同代码页上,我建议在Windows 7 font
    Consolas
    Lucida Console
    上进行配置,而不是默认的光栅字体
    终端
    )并检查这是否有区别

    有关字体设置,请参见:

    • TechRepublic快速提示和
    • 旧的(2007年)微软开发者博客

    顺便说一句:在我的Windows 7计算机上,运行批处理文件时显示的字符以
    *.lnk
    文件开头,该文件使用光栅字体10x18(选定字体-终端)在快捷方式文件的属性中配置的字符与font
    Terminal
    的字符非常相似,而在运行
    cmd
    时显示的字符与
    Courier New
    的字符相似,尽管cmd控制台窗口的属性显示的是光栅字体8x12(选定字体-Terminal)。我只需在cmd属性的Size中选择10x18而不是8x12,就可以看到字符的外观发生了变化。因此它看起来像光栅(位图)font
    Terminal
    不支持默认大小8x12,因此Windows使用
    Courier New
    作为替换,在默认控制台窗口中显示字符。我在Windows XP计算机上也可以看到同样的行为。奇怪的是,Microsoft将光栅字体
    Terminal
    定义为默认字体ont安装在Windows XP/Vista/7上,但此字体的
    *.fon
    文件都不支持默认字体大小8x12,因此替换字体
    Courier New
    用于显示默认控制台窗口中的字符。

    这一切都是关于(与控制台字体无关)。例如
    (U+2567=方框图向上单倍和水平向上双倍)在扩展ASCII(CP 437)中编码为207,但代码207在CP850中是
    ·等。@Mofi,哇,这是很多文本。我并没有真正了解所有内容,但从您上次的评论中,我将字体从“光栅字体”更改为“Lucidia控制台”(唯一的另一个选项是“consolas”,它也可以工作),它解决了这个问题。你可以用它创建一个答案,我会接受它。