2024-04-26 03:42:54 发布
网友
我们在TeamFoundationServer(TFS)中有一个包含非英语字符(š)的项目。当尝试编写一些与构建相关的东西时,我们偶然发现了一个问题——我们不能将š字母传递给命令行工具。命令提示符或其他东西会把它弄乱,并且tf.exe实用程序找不到指定的项目。
我已经尝试了.bat文件的不同格式(ANSI,UTF-8,带或不带BOM)以及用JavaScript编写脚本(这本来就是Unicode),但没有成功。如何执行程序并将Unicode命令行传递给它?
尝试:
chcp 65001
这将把代码页改成UTF-8。另外,您需要使用Lucida控制台字体。
我也有同样的问题(我来自捷克共和国)。我有一个英文版的Windows安装程序,我必须在共享驱动器上处理文件。文件路径包括捷克语特定字符。
对我有效的解决方案是:
在批处理文件中,更改字符集页
我的批处理文件:
chcp 1250 copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp
批处理文件必须保存在CP 1250中。
请注意,控制台不会正确显示字符,但会理解它们。。。
我的背景:多年来,我在控制台中使用Unicode输入/输出(而且每天都要这么做)。此外,我还为这项任务开发了支持工具)。就您了解的以下事实/限制而言,几乎没有问题:
CMD
CMD.exe
cp1252
File-I/O
Console-I/O
U+10000
“打开”窗口中的“默认值”不是很有帮助。为了获得最佳体验,您应该调整3个配置:
在控制台应用程序中再“粘贴”一次(非常技术性):
Alt
KeyUp
KeyDown
Ctrl-Alt-AltGr-Kana-Shift-Gray*
结论:除非您的键盘布局支持输入大量不带前缀键的字符,否则当您通过控制台的UIPaste时,一些有缺陷的应用程序可能会跳过字符。(这就是我推荐使用键盘布局的原因!)
Paste
还应记住,用于Windows的“可选的、功能更强的”控制台根本不是控制台。它们不支持Console-I/Oapi,因此依赖这些api工作的程序将无法运行。(不过,那些只使用“控制台文件句柄的文件I/oapi”的程序可以正常工作。)
这种非控制台的一个例子是微软的Powershell的一部分。我不使用它;要进行实验,请按并释放WinKey,然后键入powershell。
Powershell
WinKey
powershell
(另一方面,有些程序如^{}或^{}试图做更多的事情:它们“试图”拦截Console-I/Oapi,使“真正的控制台应用程序”也能工作。这绝对适用于玩具示例程序;在现实生活中,这可能会或可能不会解决您的特定问题。实验)
设置字体、键盘布局(还可以选择允许十六进制输入)。
只使用通过Console-I/Oapi并接受Unicode命令行参数的程序。例如,任何cygwin编译的程序都应该是好的。正如我已经说过的,CMD也很好。
cygwin
UPD:最初,对于cp65001中的一个bug,我将内核层和CRTL层(UPD嫒:和Windows用户模式API!)混合在一起。另外:Win8修复了这个bug的一半;我澄清了关于“更好的控制台”应用程序的部分,并添加了一个Python如何做到这一点的参考。
cp65001
尝试:
这将把代码页改成UTF-8。另外,您需要使用Lucida控制台字体。
我也有同样的问题(我来自捷克共和国)。我有一个英文版的Windows安装程序,我必须在共享驱动器上处理文件。文件路径包括捷克语特定字符。
对我有效的解决方案是:
在批处理文件中,更改字符集页
我的批处理文件:
批处理文件必须保存在CP 1250中。
请注意,控制台不会正确显示字符,但会理解它们。。。
我的背景:多年来,我在控制台中使用Unicode输入/输出(而且每天都要这么做)。此外,我还为这项任务开发了支持工具)。就您了解的以下事实/限制而言,几乎没有问题:
CMD
和“控制台”是不相关的因素。CMD.exe
只是准备在控制台(“控制台应用程序”)中“工作”的程序之一。CMD
完全支持Unicode;当任何代码页处于活动状态时,可以输入/输出所有Unicode字符。chcp 65001
非常危险。除非一个程序是专门为解决Windows的API中的缺陷而设计的(或者使用具有这些解决方法的C运行库),否则它将无法可靠地工作。Win8 fixes ½ of these problems with ^{cp1252
工作。我已经说过:要在控制台中输入/输出Unicode,不需要设置代码页。细节
File-I/O
API,而应该使用Console-I/O
API。(有关示例,请参见how Python does it。)U+10000
)。只支持简单的文本呈现(因此,欧洲语言和一些东亚语言只要使用预合成格式就可以正常工作)。[这里有一个minor fine print用于东亚和字符U+0000、U+0001、U+30FB。]实际考虑
“打开”窗口中的“默认值”不是很有帮助。为了获得最佳体验,您应该调整3个配置:
在控制台应用程序中再“粘贴”一次(非常技术性):
Alt
;的KeyUp
上传递字符;所有的传递字符的其他方式都发生在KeyDown
;所以许多应用程序都没有准备好在KeyUp
上看到字符。(仅适用于使用Console-I/O
API的应用程序。)Ctrl-Alt-AltGr-Kana-Shift-Gray*
),则可以通过模拟的按键来传递。这是任何应用程序所期望的 - 所以粘贴任何只包含此类字符的内容都是可以的。结论:除非您的键盘布局支持输入大量不带前缀键的字符,否则当您通过控制台的UI
Paste
时,一些有缺陷的应用程序可能会跳过字符。(这就是我推荐使用键盘布局的原因!)还应记住,用于Windows的“可选的、功能更强的”控制台根本不是控制台。它们不支持
Console-I/O
api,因此依赖这些api工作的程序将无法运行。(不过,那些只使用“控制台文件句柄的文件I/oapi”的程序可以正常工作。)这种非控制台的一个例子是微软的
Powershell
的一部分。我不使用它;要进行实验,请按并释放WinKey
,然后键入powershell
。(另一方面,有些程序如^{} 或^{} 试图做更多的事情:它们“试图”拦截
Console-I/O
api,使“真正的控制台应用程序”也能工作。这绝对适用于玩具示例程序;在现实生活中,这可能会或可能不会解决您的特定问题。实验)摘要
设置字体、键盘布局(还可以选择允许十六进制输入)。
只使用通过
Console-I/O
api并接受Unicode命令行参数的程序。例如,任何cygwin
编译的程序都应该是好的。正如我已经说过的,CMD
也很好。UPD:最初,对于
cp65001
中的一个bug,我将内核层和CRTL层(UPD嫒:和Windows用户模式API!)混合在一起。另外:Win8修复了这个bug的一半;我澄清了关于“更好的控制台”应用程序的部分,并添加了一个Python如何做到这一点的参考。相关问题 更多 >
编程相关推荐