平常工作时不时地会用到Windows命令行,编译个小程序或者使用某些命令行程序什么的,但是中文版Windows的命令行可选的字体只有点阵字体和新宋体,我都不喜欢。在网上搜索了一下,发现这个问题源自于Windows命令行的代码页设置。代码页是字符编码发展过程的产物,本文不再详述,感兴趣的同学可以关注我的专栏《编码精粹》 。下面我们直接看怎么解决这个问题,叙述以Windows 7为例,但是应该适合大多数版本的Windows系统。
一、默认情况
默认情况下的效果如下所示:
这个字体稍微用用还行,如果每天都要用的话,我会疯的,尤其是汉字的效果,让人不忍直视。
打开cmd,点击左上角图标,在弹出的系统菜单中选择属性,就会出现如下所示的属性窗口。可以看到cmd程序的当前代码页是936,使用的编码是GBK。接着切换到字体选项卡,查看可选的字体。
字体列表中只有点阵字体和新宋体,这个问题源于Windows对Console程序的设定,打开注册表定位至[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont],就可以看到Windows下Console程序的TrueType字体设定了。
我们可以看到936等几个字符串值每一项都对应一个代码页,比如936对应简体中文,950代表繁体中文等。0和00(000是我后加的)两项则比较特殊,其实这两个都是代码页437对应的字体。也就是说除了代码页437之外,其他的代码页只能指定一种可用的字体,否则就要使用点阵字体。
二、解决方案
既然问题的根源已经找到,那么解决起来也很简单。如果不使用默认字体以外的字体的话,可以很简单的将代码页切换到437,然后选择喜欢的字体即可。当然了默认情况下代码页437可用的字体也只有Lucida Console和Consolas,Lucida Console的效果就不敢恭维了,Consolas我觉得还挺不错的。那代码页怎么切换呢?很简单chcp [codepage]即可。
现在我们再来看一下属性页面的可选字体。
可以看到字体列表中有Consolas和Lucida Console了,选择Consolas看一下效果。
还不错哈!但是,如果你和我一样想使用更多的字体,或者对Consolas在命令行程序中的效果不满意的话,就要考虑一下增加命令行程序可用的字体了。要增加字体其实也很简单,在注册表中[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]项下增加一项名字为000的字符串值,并将其值设置为你想要用的字体的名字,如果要增加更多字体只要再增加一项字符串值,并将其命名为0000,也就是多加一个0即可。下图中我增加了一个名为Bitstream Vera Sans Mono的字体,你可以选择任何你想用的字体,当然了必须是系统中已经有的。
选择Bitstream Vera Mono,然后看一下效果~
这回顺眼不少了哈~
三、两个注意事项
- 有的同学说在代码页437下,中文显示有问题,这个我没有遇到过。如果你确实遇到了这样的问题的话,可以尝试着先按照前面我说的方法更改或添加字体,然后再将代码页切换到936。
- 前面讲的方法不仅适用于命令提示符程序cmd,也适用于PowerShell。