Consolas in Windows Console
蒙 othree 於 #happydesigner 開示,知道了怎樣在 Windows XP 的 console 視窗,也就是「命令提示字元」程式,使用 Consolas[1] 這類漂亮的字形。
因為 Windows 的 console 程式,寫的不是很聰明的緣故,所以英文版 Windows 只能使用 Lucida Console 與 raster font 這兩種字形,而中文版 Windows 因為語言的關係,更慘,只有細明體與點陣字型[2]可用,所以看起來更是醜斃了。所以,在 Windows 下開發程式,總是讓我覺得一整個不舒服。
Othree 在 #happydesigner 與大家分享了這篇文章:《Give Your Eyes a Treat》,原來 Consolas 也可以用在「命令提示字元」裡,只要在灌好 Consolas 字型之後,執行以下指令,讓「命令提示字元」知道還有這個字型可以用即可:
SHELL> reg add \
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" \
/v 00 /d Consolas
不過這招我試了沒有效,還是只有細明體和點陣字型可以選。經 othree 開示才知道,要先切到 UTF-8 後才可以選 Consolas。開啟「命令提示字元」之後,執行下列指令切到 UTF-8:
SHELL> chcp 65001
在 Windows 下,codepage 65001 就是 UTF-8。如此一來,就可以把字型改成 Consolas 了,當場把設定儲存了起來。
可惜,在 UTF-8 之下,DIR 指令可以顯示中文檔名,不過 DIR /w,碰上中文字,寬度會算錯,導致排列不整齊。這應該是因為,DIR 單純只是用 strlen() 計算檔名長度,中文字在 BIG-5 裡佔 2 bytes,剛好寬度也是佔兩個半形字元寬;但中文字在 UTF-8 裡卻是佔 3 bytes,因此一行裡每多一個中文字,後面的內容就會往右多移一個半形字元的寬度,導致排列不整齊。
今天早上到公司,亂摸亂玩之下,發現改完字型之後,還可以再切回 BIG-5,畫面裡用的字型也還是 Consolas,搭配細明體,畫面漂亮極了:
SHELL> chcp 950
真是爽啊,所有程式就一切正常,DIR /w 排整齊了,之前寫的 BATCH、Perl 程式也都不會跑不起來。可惜最後這一步沒有辦法儲存起來變成預設值,每次都必須手動跑一遍。
後記:後來發現 othree 也發表了這篇文章:《命令提示字元的字型》。
2008-06-03 補充:
之前說,最後一步 chcp 950 沒有辦法儲存起來,變成預設值,今天被我試出一個方法,可以保存 codepage 設定,使得一開啟 cmd.exe,就是 codepage 950 但採用 Consolas 字型:
- 先
chcp 65001切到 UTF-8; - 在 cmd.exe 的內容裡,利用「字型」頁籤,選擇 Consolas 字型;
- 按「確定」關閉「內容」視窗,儲存成為適用於全部;
- 重新開啟
cmd.exe,切到「內容」的「版面設定」頁籤,隨便修改一個值; - 按「確定」關閉「內容」視窗,儲存成為適用於全部;
- 重新開啟
cmd.exe,下chcp 950指令; - 開啟「內容」,此時會位於「版面設定」頁籤,修改成原來的值,但不要切到任何別的頁籤;
- 按「確定」關閉「內容」視窗,儲存成為適用於全部;
- 重新啟動
cmd.exe,完成。
這應該是利用到了 cmd.exe 的漏洞:若是「字型」這一個頁籤,沒有被開啟,則不會修正字型的設定。
因此,我們先利用第 4 步,讓「內容」的頁籤「定位」在「版面設定」裡,切回 codepage 950 之後,重新啟動「內容」,此時頁籤是在「版面設定」,而不是「字型」,修改設定值後存檔,再關閉 cmd.exe,就可以把 codepage 的設定,連同版面設定,但不含字型設定,給儲存起來。
- 可以自這裡免費下載 Consolas 字型:Consolas Font Pack for Microsoft Visual Studio 2005 or 2008。 ↩
- 即 raster font。 ↩



5 Comments
引用 命令提示字元的完美替身:PowerCmd與Console 2.0
http://blog.xuite.net/emisjerry/tech/17065906
不用這麼麻煩吧
直接 import 下面這段
最多加上你文章一開始的
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont\ 設成 Consolas
因為我以前都用 Lucida Console
看到你這篇就改設成 Consolas
又順便改了 HKLM 那個
登入再登出就有效了
所以我確定光改這三個就有效
也許 HKLM 那個也不用改
--
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\\Console]
\"FaceName\"=\"Consolas\"
[HKEY_CURRENT_USER\\Console\\%SystemRoot%_system32_cmd.exe]
\"FaceName\"=\"Consolas\"
Sunpoet,
你的設定法,真的有效耶,大感謝。
Jeff Hung
字型是可以这样更改 但是字体的大小就不能随意更改了吧 。。。
Jeff兄您好,最近正在寫一些在 MS Windows 命令列下跑的小工具(用Dev-C寫的)。在命令列下字型我裝了,語系也改了,可是沒想到在 chcp 65001 之後 DIR /w 中文是亂碼 @__@ 畫面如下
http://madoka82.ods.org/screen.jpg
雖然說沒裝之前,只要切去 65001 字碼的時候就已經是亂碼了,所以代表我的目錄夾都是 BIG5 編碼(?)可是有時候我的資料夾也是有日文字,我也沒裝什麼 unicode 補完計畫,在檔案總管中也是顯示正常。真是微妙的 Windows...
p.s.我用的是 Vista
Post a Comment