2011-04-26 143 views
23

我試圖設置Mercurial以打印出當前使用PowerShell存儲的存儲庫的狀態。到目前爲止,我有一切工作,但我希望能夠在存儲庫中打印「☿」以提示。不幸的是,似乎PowerShell在打印Unicode字符時遇到了一些問題。將Unicode字符打印到PowerShell提示

在爲Is there a Windows command shell that will display Unicode characters?接受的答案它建議的PowerShell v2的,它隨Windows 7  (我現在用的)將能夠打印Unicode字符,但我似乎無法得到它的工作。同樣,使用chcp 65001的下一個答案也不起作用。

這仍然是PowerShell的缺陷,還是我錯過了明顯的東西?

+0

你可以給你想要提示的硬拷貝,或者你想用表格提示的unicode代碼嗎? – JPBlanc 2011-05-03 18:14:55

+0

☿又名U + 263F – tghw 2011-05-03 23:41:24

回答

21

這不是PowerShell的缺陷。這是PowerShell.exe使用的Windows控制檯子系統的一個缺陷。控制檯子系統不支持Unicode,但代碼頁可以追溯到DOS日期。 PowerShell V2修復程序通過PowerShell集成腳本環境或PowerShell_ISE.exe提供。這是一個基於WPF的圖形應用程序,可以輕鬆處理Unicode字符。

從理論上講,你可以使用CHCP或

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850) 

顯示不同的字符更改代碼頁,但我沒有多少運氣與此有關。您還需要找到包含要顯示的字符的代碼頁。

+8

控制檯支持Unicode,只是沒有太多的渲染支持。沒有字體替換,沒有複雜的腳本渲染等等。而且,使用Raster字體的時候你會回到DOS時代,但PowerShell很幸運地使用TrueType字體作爲默認字體。 – Joey 2011-04-27 21:22:44

+1

@Joey你說它支持unicode,但它以什麼方式支持unicode超過cmd呢? 'chcp 1200'失敗'chcp 1201'失敗。所以不支持16位unicode代碼頁。你可以做chcp 65001,但顯然這是bug,許多批處理文件和C程序崩潰。它是沒有BOM的UTF-8。記事本不能在沒有BOM的UTF-8中創建文件。即使使用代碼頁65001(這是沒有BOM的UTF-8),'type'也管理讀取UTF-16 LE BOM文件。我同意它可以在某種程度上與unicode一起工作,但支持似乎與cmd一樣。 – barlop 2015-08-04 06:53:34

+0

由於未使用Uniscribe或DirectWrite,因此控制檯對完整的Unicode範圍進行了有限的渲染。但這與CMD無關,這是一個Unicode應用程序。主要問題是CMD不支持UTF BOM來設置批處理腳本或管道輸出的編碼在'for/f'循環中。相反,它依賴於控制檯的遺留代碼頁,您可以通過chcp.com進行設置。使用代碼頁65001(UTF-8)可能會對舊控制檯應用程序(例如3.6之前的python.exe)產生影響,因此您應該只對腳本中的選擇行進行暫時更改(例如讀取一個環境變量塊)。 – eryksun 2017-12-29 10:11:12

6

您不能使用默認的PowerShell(即Windows)控制檯。但是,如果您使用PowerShell ISE(它提供了自己的控制檯),它將起作用。我不確定這是否會滿足您的需求。

7

在這裏打印半罰款。 Consolas沒有該字符的字形,所以我在控制檯窗口中看到的是替代字形。但PowerShell接受和打印它就好了,正如您在粘貼時所看到的那樣。

現在,如果您已將控制檯窗口設置爲柵格字體,那麼故事有點不同,但PowerShell幸運地具有理智的默認設置。

1

您需要

  1. 在你的系統,包含您字形安裝一個monospace font(可能使用字符映射表找到一個合適的,等等) 然後
  2. 將其設置爲一個控制檯字體,如下所述:http://www.watchingthenet.com/how-to-add-and-change-fonts-in-windows-command-prompt.html
+0

字符映射無助於在系統上找到要安裝的字體,因爲它只能顯示系統中的字體。 babelmap會掃描系統中的所有字體,但仍然只有系統中的字體。如果字體已經在您的系統上,那麼很好..但我不認爲其中有一個字形。很久以前,我查看了哪些字體可以安裝在cmd提示符下,我碰到了3個。一個是Deja Vu Sans Mono,並且有他的角色。看到我的答案。 – barlop 2015-08-04 07:08:41

2

Deja Vu Sans Mono在cmd中工作並具有該字符,因此它也可以在PowerShell中工作。

Enter image description here

Enter image description here

順便說一句,我建議還安裝德羅伊德桑單聲道,和Courier新建,到命令提示符。然後他們也可以在PowerShell中使用。 cmd支持的單元間隔字體並不多。但那些是三個,Deja Sans Mono,Droid Sans Mono和Courier New。