有没有一种 Windows 命令行界面可以显示 Unicode 字符?

52
假设我已经安装了包含适当字形的字体,有没有适用于Windows XP的命令行界面可以显示Unicode字符?最少需要两个东西能正确地显示Unicode:

  • 目录列表。我不介意输入什么(dir,ls,get-childitem等),只要具有Unicode字符的文件名以正确的字形而不是无法打印的字符框出现。
  • 文本文件内容列表。同样,如果字符被打印出来,对我来说不管它是“less”,“more”,“cat”,“dog”等都无所谓。我知道由于文件的字符编码,这更复杂,因此如果我必须在命令行上指定这一点,那对我来说也没关系。

我尝试过以下方法:

  • cmd.exe
  • Windows PowerShell,包括多语言版本。
  • Cygwin bash

没有运气。我甚至尝试安装用于cmd/PowerShell的自定义字体。 PowerShell和cmd.exe似乎在某种程度上具备Unicode-aware功能,以至于我可以将无法打印的框从中复制/粘贴到其他应用程序中,并且会粘贴正确的字符。 Cygwin(?)似乎会转换为?字符,并且在复制/粘贴中出现。

有什么想法吗?

12个回答

41

如果您想使用 cmd.exe 完成此操作,您需要使用控制台属性对话框切换到 Unicode TrueType 字体。

然后使用以下命令:

 CHCP 65001
 DIR > UTF8.TXT
 TYPE UTF8.TXT

命令:

  • 将控制台切换为UTF-8(65001)
  • 将DIR的输出重定向到UTF8.TXT
  • 将UTF-8转储到控制台

这些字符仍需要由字体支持才能在控制台上正确显示。

I18N:Windows命令提示符下的Unicode(C ++; .Net; Java)


1
根据 https://dev59.com/yWYq5IYBdhLWcg3w5Um8 ,CP 65001 并不能解决所有 Unicode 支持的问题,因此这是一个有缺陷的解决方案。 - ivan_pozdeev

18

这是PowerShell v1中的一个主要问题。版本2带有“图形外壳程序”,可以纠正问题,但问题归根结底不在于PowerShell,而在于Windows控制台宿主(Cmd.exe也使用它)。如果您想要,请获取PowerShell v2的当前CTP。

实际上,PowerShell v2.0已经最终确定并随着Windows 7和Windows Server 2008 R2的发布在8月初推出。此外,向后兼容版本(Windows Vista/2008)最近达到了发布候选版本的里程碑; Windows XP /Windows Server 2003应很快跟进。 链接


1
因为提出了解决问题的有效方案,我已经点赞了。虽然我还在期待更好的解决方案,但我会考虑接受它。作为“早期阶段”,它还有很长的路要走才能成为真正可用的 shell。 - Brandon DuRette
1
目前的 CTP3 版本非常稳定,可悲的是,这是目前唯一不需要付费的解决方案。 - Don Jones
由于最近这个旧话题被顶到了列表的顶部,我编辑了主要答案并附上了最新 Powershell 片段的链接。 - Richard Berg
2
我不明白。这个“图形外壳”在哪里?我正在使用Windows 8.1,调用Powershell仍然似乎使用1252代码页(在我的en-US笔记本电脑上)。 - Jason R. Coombs
Powershell ISE 是一个图形化的 shell。它可以弹出自动完成等提示框。 - sandos

8

使用命令“chcp 65001”将代码页设置为UTF-8,应该可以帮助您正确地在shell(使用cmd.exe)中打印文件内容。但是对于目录列表来说这并不适用(NTFS文件名使用UTF-16编码)。


4

试试这个:

powershell.exe -NoExit /c "chcp.com 65001"

谁使用msysgit:

powershell.exe -NoExit /c "chcp.com 65001; sh --login -i"

不要忘记将窗口的字体更改为支持UTF-8的TrueType字体(“Lucida Console”)


这样做可以很好地显示我的utf8字符。有没有一种方法使powershell.exe配置持久化(chcp.com 65001),以便默认选择它? - chmike
使用与您配置相同的cmd,也可以工作。使用chcp 65001,然后选择Lucida控制台字体。 - alljoyland
我在PowerShell中使用msysgit,并使用以下配置:https://gist.github.com/iegik/7485025 - iegik

3
这是我在运行英文版Windows 7专业版的cmd.exe中获得中文输出的方法。我还尝试了包含日语、俄语和波兰语的文件名,它们似乎都能正确显示。至少当我尝试使用包含非ASCII字符的dir xxx*进行输入时,输入似乎也能正常工作。
  1. Install console2, which is a front-end to cmd.exe (and other shells)

  2. After installation, follow these instructions

    Delete the key HKEY_CURRENT_USER\Console\Console2 command window in the registry.

    Import the following data into windows registry:

    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USER\Console\Console2 command window] 
    "CodePage"=dword:000003a8 
    "FontSize"=dword:000a0000 
    "FontFamily"=dword:00000036 
    "FontWeight"=dword:00000190 
    "FaceName"="細明體" 
    "HistoryNoDup"=dword:00000000
    
  3. You may or may not have to change the font. Initially I had the font set to @NimSum, and the Chinese characters came out rotated 90 degrees. Then I switched to NimSum (without the @) and it came out correctly. Then just out of curiosity I switched to Consola and yet I can still see the Chinese characters. So I'm not sure if you actually have to set the font or not.


2

打开以管理员身份运行的命令提示符。通过以下方式将可用的TrueType字体查询到控制台中:

REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

您将看到以下输出结果:
0    REG_SZ    Lucida Console
00    REG_SZ    Consolas
936    REG_SZ    *新宋体
932    REG_SZ    *MS ゴシック

现在我们需要添加一个支持所需字符的TrueType字体,例如Courier New,我们通过将零添加到字符串名称来实现这一点,因此在这种情况下,下一个字体名称将是“000”:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

现在我们实现了 UTF-8 支持:

REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

将默认字体设置为“Courier New”:

REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

将字体大小设置为20:

REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

如果您喜欢,可以启用快速编辑:

REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f

2
尝试使用Console 2。但要小心颜色/调色板配置,因为它们有点故障。我已证实它们无法工作,表现类似于cmd.exe。

1
根据您的建议,我尝试了一下,但似乎并没有解决我的问题。在包含韩文字符文件名的目录中运行“dir”命令会导致出现问号。这种行为与cmd.exe相同。 - Brandon DuRette
好的,Console2 很可能也使用了 Windows 控制台宿主程序,只不过前端界面更加美观。 - Kim

2

如果你想使用真正的Shell,请尝试PowerShell Plus。你可以选择Unicode字体并且可以处理其他语言(不仅限于编辑器,还包括真正的控制台)。


1
截至2011年11月,MinTTY现在是Cygwin的默认终端仿真器(通过setup.exe安装)。MinTTY是PuTTY终端仿真器的一个分支,因此具有良好的Unicode支持和与其他终端仿真器更好的兼容性。

0

PowerShell V2 CTP3内部似乎可以做到这一点。唯一的缺点是默认控制台编码为UCS-2 LE而不是UTF-8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接