Windows 代码页850工作,65001失败!没有对“的”作出回应;调用foo.cmd";。内部命令工作正常

Windows 代码页850工作,65001失败!没有对“的”作出回应;调用foo.cmd";。内部命令工作正常,windows,console,codepages,Windows,Console,Codepages,这个问题基本上解释了这个问题 我正在使用Windows XP Pro Service Pack 3 ComSpec=C:\WINDOWS\system32\cmd.exe 我通过启动启动了控制台。。。运行对话框。。。cmd.exe 这是我的控制台的“视图”: 命令,然后是输出(和我的//注释) 以上工作正常(如预期)。 在Windows的世界里一切都很快乐, 但当我切换到代码页65001时,“调用”失败 C:\> chcp 65001 Active code page: 65001 //

这个问题基本上解释了这个问题

我正在使用Windows XP Pro Service Pack 3
ComSpec=C:\WINDOWS\system32\cmd.exe
我通过启动启动了控制台。。。运行对话框。。。cmd.exe

这是我的控制台的“视图”:
命令,然后是输出(和我的//注释)

以上工作正常(如预期)。 在Windows的世界里一切都很快乐, 但当我切换到代码页65001时,“调用”失败

C:\> chcp 65001
Active code page: 65001
// output is as expected

C:\> echo @chcp ^& REM 65001>test65001.cmd
// no output; as ecpected

C:\> type test65001.cmd
@chcp & REM 65001
// output is as expected

C:\> call test65001.cmd
// NO OUTPUT, NO ERROR, NO ANYTHING, NADA... other than frustration :)

这里发生了什么(没有发生?

有趣的是,它根本没有运行它。如果您执行以下操作:

pax> echo echo yy >xx.cmd
pax> chcp 850
pax> xx
yy
pax> chcp 65001
pax> xx
pax> _
你什么也得不到。它不仅缺少输出,而且根本没有运行(将
start.
放在
echo
行之前就是明证)。在代码页850中,资源管理器运行,而在代码页65001中则不是这样

关于这个问题的讨论已经结束了。您可以让脚本运行时使用:

chcp 65001 && xx.cmd && chcp 850
因此,在启动命令文件时似乎出现了某种问题,但只有当代码页为65001时,才能输入命令


网络上的其他人似乎认为PowerShell可能是一个不错的选择,因为
cmd.exe
中提供了严格的支持。这是一个你必须自己评估的决定,但是,我自己在一个大型组织中工作,使用许多工具来完成同样的工作,我怀疑微软将在PowerShell而不是旧的命令shell后面进行任何增强工作。它们的资源很大,但不是无限的。

原因是windows xp的cmd.exe使用参数dwFlags(值为1)在内部调用函数MultiByteToWideChar。文档中说:“对于UTF-8,dwFlags必须设置为0。否则,函数将失败”


这里有一个补丁:

我刚刚在Win7 x64上的非提升cmd上运行了这些,并获得了预期的输出。你的操作系统是什么?@Franci:Specs(一个好主意)。。。我使用的是Windows XP Pro Service Pack 3--ComSpec=C:\Windows\system32\cmd.exe(我已添加到主要问题中)我的经验是,即使在当前代码页为65001时直接在cmd窗口中运行批处理程序,它也不起作用。使用msysgit(或者我猜是mingw),如果您尝试在vi/vim中编辑任何内容,您将看到垃圾,而不是实际的文本。谢谢。。。您的建议有效:(chcp 65001&调用test65001.cmd&&chcp 850)。。。你已经很好地概括了总体情况。。。(但是:(我没有给你的答案打分所需的最低分数)--这带来了另一个问题(实际上是我的问题)…我以为整理.cmd的东西也会整理.py Pythos脚本,它们也没有做任何事情…现在一个.py脚本抛出了一个摆动:致命的Python错误:py_Initialize:无法初始化sys标准流lookuperor:未知编码:cp65001---有什么想法吗,有人吗?看看可能即将到来的修复程序。而且,很少有SOER我们将在对我的回答的评论中看到这个问题。我建议你把它作为另一个问题来做,这样你就更有可能得到回应。
chcp 65001 && xx.cmd && chcp 850