2011-04-26 144 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。