我chcp 65001在Windows shell中遇到命令问题.
我需要生成文件夹中的文件列表.所以我运行cmd.exe,输入
cd folder
dir /B /O:N > list_of_files.txt
Run Code Online (Sandbox Code Playgroud)
它工作,但我遇到了一些特殊的非ASCII字符的问题,这些字符在某些文件名中.所以我补充道
chcp 65001
一切正常,但当我将这些命令放入.bat文件时,脚本不起作用.
所以
cd folder
chcp 65001
dir /B /O:N > list_of_files.txt
Run Code Online (Sandbox Code Playgroud)
不生成列表.
和
cd folder
chcp 65001 && dir /B /O:N > list_of_files.txt
Run Code Online (Sandbox Code Playgroud)
以及
cd folder
chcp 65001 > nul && dir /B /O:N > list_of_files.txt
Run Code Online (Sandbox Code Playgroud)
生成列表,但使用默认编码:/.
一切都在cmd.exe中工作,但不在.bat文件中.
我已经阅读了主题:stackoverflow.com/questions/2182568/batch-script-is-not-executed-if-chcp-was-called,但它没有帮助.
编辑:我部分解决了我的问题,改为chcp 65001,chcp 1250因为所有字符都在这个编码.但实际上这并没有回答这个问题.
如果您在Windows上进行自动化并且您正在重定向不同命令的输出(内部cmd.exe或外部,您将发现您的日志文件包含组合的Unicode和ANSI输出(意味着它们无效并且在查看器/编辑器中无法正常加载) ).
是否可以使cmd.exe与UTF-8一起使用?这个问题不是关于stdin/stdout/stderr重定向和Unicode的显示.
我正在寻找一个可以让你的解决方案:
如果不可能使用批处理文件获得这种一致性,是否有另一种解决此问题的方法,比如使用python脚本编写?在这种情况下,我想知道是否可以单独进行Unicode检测(使用脚本的用户不应该记住被调用的工具是否会输出Unicode,它只是希望将输出转换为UTF-8.
为简单起见,我们假设如果工具输出不是Unicode,则将其视为UTF-8(无代码页转换).