我们在Team Foundation Server (TFS)中有一个项目,其中有一个非英语字符(š)。当尝试编写一些与构建相关的脚本时,我们偶然发现了一个问题——我们不能将这个字母传递给命令行工具。命令提示符或其他东西会把它弄乱,tf.exe实用程序无法找到指定的项目。
我尝试了不同格式的.bat文件(ANSI, UTF-8,带BOM和不带BOM),以及用JavaScript编写脚本(本质上是Unicode) -但运气不好。如何执行程序并传递一个Unicode命令行?
我们在Team Foundation Server (TFS)中有一个项目,其中有一个非英语字符(š)。当尝试编写一些与构建相关的脚本时,我们偶然发现了一个问题——我们不能将这个字母传递给命令行工具。命令提示符或其他东西会把它弄乱,tf.exe实用程序无法找到指定的项目。
我尝试了不同格式的.bat文件(ANSI, UTF-8,带BOM和不带BOM),以及用JavaScript编写脚本(本质上是Unicode) -但运气不好。如何执行程序并传递一个Unicode命令行?
当前回答
实际上,关键在于命令提示符实际上理解这些非英语字符,只是不能正确地显示它们。
当我在命令提示符中输入包含一些非英语字符的路径时,它显示为“?? ?”?????? ? ? ? ? ?”当您提交命令(cd "???????? ?????”在我的情况下),一切都按照预期工作。
其他回答
一个更好更干净的方法是:安装可用的免费微软日语包。(其他东方语言包也可以,但我已经测试了日语包。)
这将为您提供具有较大字形集的字体,使它们成为默认行为,更改各种Windows工具,如cmd, WordPad等。
检查非unicode程序的语言。如果你在Windows控制台中有俄语问题,那么你应该在这里设置俄语:
由于我还没有看到Python 2.7的完整答案,我将概述两个重要步骤和一个非常有用的可选步骤。
You need a font with Unicode support. Windows comes with Lucida Console which may be selected by right-clicking the title bar of command prompt and clicking the Defaults option. This also gives access to colours. Note that you can also change settings for command windows invoked in certain ways (e.g, open here, Visual Studio) by choosing Properties instead. You need to set the code page to cp65001, which appears to be Microsoft's attempt to offer UTF-7 and UTF-8 support to command prompt. Do this by running chcp 65001 in command prompt. Once set, it remains this way until the window is closed. You'll need to redo this every time you launch cmd.exe.
要获得更永久的解决方案,请参考超级用户上的答案。简而言之,在HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor中使用regedit创建一个REG_SZ (String)条目,并将其命名为AutoRun。将其值修改为chcp 65001。如果不想看到命令的输出消息,请使用@chcp 65001>nul。
有些程序在与这种编码进行交互时遇到麻烦,MinGW就是一个显著的例子,它在编译时出现无意义的错误消息而失败。尽管如此,这工作得非常好,并且不会对大多数程序造成错误。
对于类似的问题(我的问题是在命令提示符上显示来自MySQL的UTF-8字符),
我是这样解决的:
我把命令提示符的字体改成了Lucida Console。(此步骤必须与您的情况无关。它只与你在屏幕上看到的东西有关,而与角色本身无关)。 我把代码页改成了Windows-1253。您可以在命令提示符中通过“chcp 1253”执行此操作。它适用于我想要查看UTF-8的情况。
我通过在批处理文件中使用它们的短名称(8点3)来删除以unicode命名的文件,从而避免了类似的问题。
短名称可以通过执行dir /x查看。显然,这只适用于已知的Unicode文件名。