如何在Windows命令行中使用unicode字符?

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

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


我的背景:我在控制台中使用Unicode输入/输出多年(每天都要做很多工作,而且我正在为这项任务开发支持工具)。 就您理解以下事实/限制而言,问题很少:

  • CMD和“控制台”是无关的因素。 CMD.exe是准备好在控制台中“工作”的程序之一(“控制台应用程序”)。
  • AFAIK, CMD对Unicode有完美的支持; 您可以在任何代码页处于活动状态时输入/输出所有Unicode字符。
  • Windows'控制台对Unicode有很多支持 - 但它并不完美(只是“足够好”;见下文)。
  • chcp 65001是非常危险的。 除非某个程序是专门用于解决Microsoft C运行时库中的缺陷(或使用不同的CRTL),否则它将无法可靠运行。
  • 我在cp1252工作。 正如我已经说过的: 要在控制台中输入/输出Unicode,不需要设置代码页
  • 细节

  • 要将Unicode读取/写入控制台,应用程序(或其C运行时库)应足够聪明,以便不使用File-I / O API,而使用Console-I / O API。
  • 同样,为了读取Unicode命令行参数,应用程序(或其C运行时库)应该足够聪明以使用相应的API。
  • 控制台字体渲染仅支持BMP中的Unicode字符(换句话说:在U+10000 )。 只支持简单的文本渲染(所以欧洲 - 和一些东亚 - 语言应该工作正常 - 就一个使用预合成形式)。 [这里有东亚和字符U + 0000,U + 0001,U + 30FB的小字样。]
  • 实际考虑

  • Window上的默认值不是很有帮助。 为了获得最佳体验,应该调整3个配置:

  • 对于输出:控制台字体。 为了获得最佳效果,我建议我的构建。 (安装说明出现在此处 - 也列在此页的其他答案中。)
  • 对于输入:有能力的键盘布局。 为了获得最佳效果,我推荐我的布局。
  • 对于输入:允许Unicode的HEX输入。
  • “粘贴”到控制台应用程序中的另一个问题(非常技术性):

  • HEX输入在Alt KeyUp上提供一个字符; 所有其他提供角色的方式都发生在KeyDown ; 很多应用程序都没有准备好在KeyUp上看到一个字符。 (仅适用于使用Console-I / O API的应用程序。)
  • 结论:许多应用程序不会对HEX输入事件做出反应。
  • 而且,“粘贴”字符会发生什么情况取决于当前的键盘布局:如果可以在不使用前缀键的情况下键入字符(但可以使用任意复杂的修饰符组合,如在Ctrl-Alt-AltGr-Kana-Shift-Gray* ),然后它在模拟按键上传送。 这是任何应用程序所期望的 - 所以粘贴只包含这些字符的任何内容都可以。
  • 但是,“其他”字符是通过模拟HEX输入提供的
  • 结论 :除非您的键盘布局支持输入很多没有前缀键的字符,否则当您通过控制台的UI Paste时,某些错误应用程序可能会跳过字符: Alt-Space EP 。 ( 就是我推荐使用我的键盘布局的原因!)

    还应该记住,Windows的“替代”,更强大的“控制台” 根本不是控制台 。 它们不支持Console-I / O API,因此依赖这些API工作的程序将无法运行。 (虽然只使用“File-I / O API到控制台文件句柄”的程序仍然可以正常工作。)

    这种非控制台的一个例子是MicroSoft Powershell的一部分。 我不用这个; 试验,按下并释放WinKey ,然后输入powershell

    概要

  • 设置字体,键盘布局(以及可选的允许HEX输入)。

  • 只使用经过Console-I / O API的程序,并接受Unicode命令行参数。 例如,任何cygwin编译的程序都应该没问题。 正如我已经说过的, CMD也很好。


  • 尝试:

    chcp 65001
    

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


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

    适用于我的解决方案是:

    在批处理文件中,更改charset页面

    我的批处理文件:

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

    批处理文件必须保存在CP 1250中。

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

    链接地址: http://www.djcxy.com/p/5127.html

    上一篇: How to use unicode characters in Windows command line?

    下一篇: How can you find out which process is listening on a port on Windows?