我有一个 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
可以看到自己的用户帐户使用的代码页。然后可以在维基百科或其他网站上查找该代码页是否支持根本无法正确显示的字符。
使用的控制台字体不支持该代码页和字符编码。
Stack Overflow 上的以下答案可能有助于理解该问题:
Windows 7 上的控制台与 Windows 8/8.1/10 上的控制台之间的默认差异是默认使用的字体,无法使用 Windows 命令在批处理文件中进行更改。
因此,我建议比较
cmd.exe
在 Windows 7 和 Windows 10 上使用的代码页。根据用户帐户配置的国家/地区,在两个 Windows 使用的相同代码页上,我建议在 Windows 7 字体上配置 Consolas
或 Lucida Console
而不是默认的 光栅字体 (Terminal
) 并检查是否有区别。
有关字体问题另请参阅:
顺便说一句:在我的 Windows 7 机器上,运行批处理文件时显示的字符以
*.lnk
文件开头,并在快捷方式文件的属性中配置了 光栅字体 10x18(选定字体 - 终端),看起来确实像字符字体 Terminal
的字符,而运行 cmd
时显示的字符看起来像 Courier New
的字符,尽管 cmd 控制台窗口的属性显示 Raster Fonts 8x12(Selected Font - Terminal)。我可以看到,只需在 cmd 属性中的 Size 中选择 10x18 而不是 8x12 ,字符的外观就会发生变化。所以看起来光栅(位图)字体Terminal
不支持默认大小8x12,因此Windows使用Courier New
作为替代在默认控制台窗口中显示字符。我在 Windows XP 计算机上也可以看到相同的行为。奇怪的是,微软将光栅字体 Terminal
定义为 Windows XP/Vista/7 上的默认字体,但该字体的 *.fon
文件都不支持默认字体大小 8x12,因此替换字体 Courier New
是用于在默认控制台窗口中显示字符。