如何在Windows命令行中使用unicode字符?
我们在Team Foundation Server(TFS)中有一个非英文字符(š)的项目。 当试图编写一些与构建相关的东西时,我们偶然发现了一个问题 - 我们无法将š字母传递给命令行工具。 命令提示符或其他什么都不会混淆它,并且tf.exe实用程序找不到指定的项目。
我已经尝试了.bat文件(带有和不带有BOM的ANSI,UTF-8)的不同格式,以及JavaScript中的脚本(本质上是Unicode) - 但没有运气。 我如何执行程序并将其传递给Unicode命令行?
我的背景:我在控制台中使用Unicode输入/输出多年(每天都要做很多工作,而且我正在为这项任务开发支持工具)。 就您理解以下事实/限制而言,问题很少:
CMD
和“控制台”是无关的因素。 CMD.exe
是准备好在控制台中“工作”的程序之一(“控制台应用程序”)。 CMD
对Unicode有完美的支持; 您可以在任何代码页处于活动状态时输入/输出所有Unicode字符。 chcp 65001
是非常危险的。 除非某个程序是专门用于解决Microsoft C运行时库中的缺陷(或使用不同的CRTL),否则它将无法可靠运行。 cp1252
工作。 正如我已经说过的: 要在控制台中输入/输出Unicode,不需要设置代码页 。 细节
U+10000
)。 只支持简单的文本渲染(所以欧洲 - 和一些东亚 - 语言应该工作正常 - 就一个使用预合成形式)。 [这里有东亚和字符U + 0000,U + 0001,U + 30FB的小字样。] 实际考虑
Window上的默认值不是很有帮助。 为了获得最佳体验,应该调整3个配置:
“粘贴”到控制台应用程序中的另一个问题(非常技术性):
Alt
KeyUp
上提供一个字符; 所有其他提供角色的方式都发生在KeyDown
; 很多应用程序都没有准备好在KeyUp
上看到一个字符。 (仅适用于使用Console-I / O API的应用程序。) Ctrl-Alt-AltGr-Kana-Shift-Gray*
),然后它在模拟按键上传送。 这是任何应用程序所期望的 - 所以粘贴只包含这些字符的任何内容都可以。 结论 :除非您的键盘布局支持输入很多没有前缀键的字符,否则当您通过控制台的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?