前言
話說n年前,我想開發一款powershell麻將游戲,但是發現命令行下無法顯示麻將牌這種特殊符號。
經過研究發現,這是4字節的utf16le字符串。而powershell依賴的渲染引擎,只能渲染雙字節的,即65535之內的。
Linux下的powershell沒有這個問題。
我給powershell提交了issue,但是沒有得到反饋。
隨着時間的推移,隨着git的普及,unicode字符渲染問題越來越嚴重了,因為git輸出中有很多特殊字符串,用戶呼聲越來越高,才引起了ms的重視。也就有了Windows Terminal。
命令行渲染引擎
命令行渲染引擎是啥玩意?我以前不知道,現在我知道了。就是conhost.exe。
簡單來講老版本的conhost.exe,只渲染雙字節=65535之內的utf16le,4字節的不渲染。
新版本的,對於4字節的擴展字符,現在也渲染了。
具體可以看看Windows Terminal原理介紹。
這是一個重大+基礎的東西,但我不明白為什么微軟不給舊的系統使用。
要求系統最低版本為:201905月版win10。Win10-18362
在我眼中,這就是在win中新建個conhost2.exe,然后讓cmd.exe加參數調用它的問題。
或者新建 conhost2cmd.exe ,,, conhost2powershell.exe。
圖示:
圖1
圖2
圖3
結論:
1使用這個新的conhost.exe,或者說使用Windows Terminal (Preview),最大的好處,就是給cmd.exe,powershell.exe,pwsh.exe帶來了顯示特殊字符。
2 不要直接運行cmd.exe,powershell.exe,pwsh.exe,要使用套在Windows Terminal 殼子中的cmd.exe,powershell.exe,pwsh.exe。