Windows命令行中的Unicode字符 – 如何?

我们在Team Foundation Server(TFS)中有一个非英文字符(š)的项目。 当试图编写一些与构build相关的东西时,我们偶然发现了一个问题 – 我们不能将š字母传递给命令行工具。 命令提示符或其他什么都不会混淆tf.exe实用程序找不到指定的项目。

我已经尝试了.bat文件的不同格式(ANSI,UTF-8带和不带BOM )以及在JavaScript中编写脚本(本身就是Unicode) – 但没有运气。 如何执行程序并将其传递给Unicode命令行?

尝试:

chcp 65001 

这会将代码页更改为UTF-8。 另外,您需要使用Lucida控制台字体。

我有同样的问题(我来自捷克共和国)。 我有一个Windows的英文安装,我必须使用共享驱动器上的文件。 这些文件的path包括捷克特定的字符。

适用于我的解决scheme是:

在batch file中,更改charset页面

我的batch file:

 chcp 1250 copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp 

batch file必须保存在CP 1250中。

请注意,控制台不会正确显示字符,但它会理解他们…

检查非Unicode程序的语言。 如果您在Windows控制台中遇到俄语问题,那么您应该在这里设置俄语:

更改非Unicode程序的语言

实际上,诀窍是命令提示符实际上理解这些非英文字符,只是不能正确显示它们。

当我在包含一些非英文字符的命令提示符中inputpath时,它显示为“?? ?????? ?????”。 当你提交你的命令(在我的情况下cd“??? ?????? ?????”),一切都按预期工作。

在Windows 10 x64机器上,我通过以下命令使命令提示符显示非英文字符:

打开提升的命令提示符(以pipe理员身份运行CMD.EXE)。 通过以下方式在registry中查询可用的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这样需要的字符。 我们通过向string名称添加零来实现,所以在这种情况下,下一个将是“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 

更改Windows控制台的默认代码页是相当困难的。 当你search网页时,你会发现不同的build议,但是其中一些可能会完全破坏你的Windows,也就是说你的电脑无法启动。

最安全的解决scheme是这样的:转到您的registry项HKEY_CURRENT_USER\Software\Microsoft\Command Processor并添加string值Autorun = chcp 65001

或者,您可以使用这个小批处理脚本的最常见的代码页。

 @ECHO off SET ROOT_KEY="HKEY_CURRENT_USER" FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i ECHO System default values: ECHO. ECHO ............................................... ECHO Select Codepage ECHO ............................................... ECHO. ECHO 1 - CP1252 ECHO 2 - UTF-8 ECHO 3 - CP850 ECHO 4 - ISO-8859-1 ECHO 5 - ISO-8859-15 ECHO 6 - US-ASCII ECHO. ECHO 9 - Reset to System Default (CP%OEMCP%) ECHO 0 - EXIT ECHO. SET /P CP="Select a Codepage: " if %CP%==1 ( echo Set default Codepage to CP1252 reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f ) else if %CP%==2 ( echo Set default Codepage to UTF-8 reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f ) else if %CP%==3 ( echo Set default Codepage to CP850 reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f ) else if %CP%==4 ( echo Set default Codepage to ISO-8859-1 add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f ) else if %CP%==5 ( echo Set default Codepage to ISO-8859-15 add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f ) else if %CP%==6 ( echo Set default Codepage to ASCII add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f ) else if %CP%==9 ( echo Reset Codepage to System Default reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f ) else if %CP%==0 ( echo Bye ) else ( echo Invalid choice pause ) 

使用@chcp 65001>nul而不是chcp 65001抑制每次启动新的命令行窗口时输出的“活动代码页:65001”。

您可以从代码页标识符中获取所有可用编号的完整列表

请注意,这些设置仅适用于当前用户。 如果您想为所有用户SET ROOT_KEY="HKEY_CURRENT_USER"通过SET ROOT_KEY="HKEY_LOCAL_MACHINE"replaceSET ROOT_KEY="HKEY_CURRENT_USER" SET ROOT_KEY="HKEY_LOCAL_MACHINE"

由于我没有看到Python 2.7的完整答案,我将概述两个重要的步骤和一个非常有用的可选步骤。

  1. 你需要一个支持Unicode的字体。 Windows随附Lucida控制台,可以通过右键单击命令提示符的标题栏并单击Defaults选项来select。 这也可以访问颜色。 请注意,您也可以通过select“ Properties来更改以某种方式调用的命令窗口的设置(例如,在此处打开Visual Studio)。
  2. 您需要将代码页设置为cp65001 ,这似乎是Microsoft试图为命令提示符提供UTF-7和UTF-8支持的尝试。 通过在命令提示符下运行chcp 65001做到这一点。 一旦设置,它将保持这种方式,直到窗户closures。 每次启动cmd.exe时都需要重做。

要获得更持久的解决scheme,请参阅超级用户上的此答案 。 简而言之,在HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor使用regedit创build一个REG_SZ (String)条目,并将其命名为AutoRun 。 将其值更改为chcp 65001 。 如果您不想看到命令的输出消息,请改为使用@chcp 65001>nul

有些程序在编码时遇到了麻烦,MinGW是一个在编译时出现无意义的错误信息时出现故障的程序。 尽pipe如此,这个工作非常好,不会导致大多数程序的错误。

对于类似的问题,(我的问题是在命令提示符下显示来自MySQL的UTF-8字符),

我解决了这个问题:

  1. 我改变了命令提示字体到Lucida控制台。 (这一步必须与你的情况无关,只能与你在屏幕上看到的而不是与真正的angular色相关)。

  2. 我将代码页更改为Windows-1253。 您可以通过“chcp 1253”在命令提示符处执行此操作。 它适用于我想要查看UTF-8的情况。

如果计算机在DOS窗口中input时显示正确的path/文件名,则可以快速决定.bat文件:

  1. 复制con temp.txt [按Enter键]
  2. inputpath/文件名称[按Enter键]
  3. Ctrl-Z [按Enter]

这样你创build一个.txt文件 – temp.txt。 在记事本中打开它,复制文本(不要担心它看起来不可读),并将其粘贴到.bat文件中。 执行在DOS窗口中创build的.bat工作对于我(西里尔文,保加利亚语)。

一个更好的更清洁的事情要做:只需安装可用,免费的微软日语语言包。 (其他的东方语言包也可以,但是我已经testing过了。)

这给你带有更大字形集的字体,使它们成为默认行为,改变各种Windows工具,如cmd,写字板等。

将代码页更改为1252正在为我工​​作。 对我来说,问题是符号double doller§在Windows Server 2008上由DOS转换为另一个符号。

在我的BCP声明中,我已经使用了CHCP 1252和一个帽子。

我遇到了一个类似的问题,通过在batch file中用短的(8点3)名称引用它们来删除Unicode命名的文件。

短名可以通过执行dir /x来查看。 显然,这只适用于已知的Unicode文件名。

一个非常简单的select是安装一个Windows bash shell(如MinGW)并使用它:

在这里输入图像说明

有一点点的学习曲线,因为您需要使用Unix命令行function,但您会喜欢它的强大function,并且可以将控制台字符集设置为UTF-8。

在这里输入图像说明

当然,你也可以得到像grep,find,less等所有常见的* nix好东西。

这个问题很烦人。 我的文件名和文件内容通常都有中文字符。 请注意,我正在使用Windows 10,这里是我的解决scheme:

在Windows 10上安装Ubuntu bash时显示文件名 ,例如dirls

  1. 设置区域以支持非UTF 8字符。

  2. 之后,控制台的字体将被更改为该语言环境的字体,并且还会更改控制台的编码。

完成上述步骤之后,请使用命令行工具显示UTF-8文件的文件内容

  1. 通过chcp 65001将页面更改为utf-8
  2. 更改为支持utf-8的字体,如Lucida Console
  3. 使用type命令查看文件内容,或者如果您在Windows 10上安装了Ubuntu bash,则为cat
  4. 请注意,在将控制台的编码设置为utf-8之后,我无法使用中文input法在cmd中input中文字符。

巴西葡萄牙语代码是1252

 chcp 1252 

到utf-8: chcp 65001

回到默认: chcp 437