批处理文件中包含UTF-8字符的命令行参数会导致问题

3
我写了一个小工具,它以路径作为命令行参数,但是如果这个参数是从批处理文件中传递并包含UTF-8字符(当系统语言为德语时,这种情况非常普遍),我就会遇到麻烦。
我可以从项目的调试属性中传递带有Umlaut的文件名,没有问题。 我可以从命令行传递带有Umlaut的文件名,没有问题。 但是如果我从批处理文件中传递带有Umlaut的文件名,就会出现混乱。
显然,我已经尝试将批处理文件保存为UTF-8编码...但是这样批处理文件根本不执行任何命令。
实际程序是用C#编写的。我在批处理文件或代码端如何处理这些参数呢?

请您能否提供一个具体的问题示例? - Sinatr
3个回答

5

在你的批处理文件中,使用CHCP 1252作为第一行,它将与路径一起正常工作。

编辑:刚刚测试过了。它可以工作。参数可以正常工作,但通过echo获取正确输出结果无法正常显示。

无论如何,如果你尝试echo出像“öäü”这样的内容,它都不能正确显示。

要完全避免这个问题,你需要找一个能够以ASCII编码保存文件的编辑器(据我所知,notepad++不能做到这一点)。


1
这正是我所期望的解决方案,而且它完美无缺地运行!谢谢! - UncleBob

0

你可以使用PowerShell脚本处理UTF-8编码的文件。批处理器仅支持ASCII编码的文件。


0
如果有人发现这个问题,并且使用的是 Windows 10 或更新版本,这里有一个更新:
chcp 65001 will set cmd to utf-8.

不知道这个方法是否适用于所有情况,但它对我很有帮助。


更多信息请参阅:https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers - Jeppe Sörensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接