我想在 Windows 10 中自动创建目录树文件。
在 PowerShell 中,我执行了以下命令:
cd C:\TreeTest
tree /f > .\TreeStructure.txt
Run Code Online (Sandbox Code Playgroud)
输出是一个漂亮的 UTF-8 文件:
现在我想在批处理文件中做同样的事情:
@echo off
cd C:\TreeTest
tree /f > .\TreeStructure.txt
Run Code Online (Sandbox Code Playgroud)
但是批处理文件执行的输出的编码搞砸了:
为什么 PowerShell 输出的编码与批处理文件的输出不同?
我知道可以通过将 /a 添加到 tree 命令来获得 ASCII 输出,但我更喜欢将漂亮的 UTF-8 输出保存到我的树文件中。
我尝试通过将“chcp 65001”添加到我的批处理文件中来更改代码页,但它没有更改文件输出。
您错误地假设您的编辑器Notepad++
将 PowerShell 中创建的文件读取为 UTF8。
有UTF16-LE
/UCS-2 LE-BOM
有BOM 0xFF 0xFE
在 cmd.exe 中创建的树文件在 actice 代码页中进行编码,请参阅 的输出chcp
并相应地更改编码Notepad++
。
> chcp
Aktive Codepage: 850.
Run Code Online (Sandbox Code Playgroud)
更改编码(在我的德语语言环境 Notepad++ 中):
LotPing的回答是正确的。只是为了详细描述:
\n重定向运算符>
(将指定的流发送到文件):
\n\n当您写入文件时,重定向运算符使用
\nUnicode
\n编码。如果文件具有不同的编码,\n输出的格式可能不正确。要将内容重定向到非 Unicode 文件,请使用\ncmdletOut-File
及其Encoding
参数。11复制粘贴,因为在线文档
\nGet-Help about_Redirection -ShowWindow
中有错误
\n\n当您写入文件时,重定向运算符使用\n
\nUTF8NoBOM
编码。
cmd.exe
)中:cmd.exe
(默认):内部命令到管道或文件的输出是OEM
,cmd.exe /A
:导致内部命令输出到管道或文件ANSI
,并且cmd.exe /U
:导致内部命令到管道或文件的输出为Unicode,即UCS-2 LE
(否BOM
):\n\nShell
\nCMD
可以重定向OEM
//ANSI
Unicode\n(UCS-2 le
) 但不能UTF-8
。可以通过启动\n或或
来选择此选项。CMD
CMD /A
CMD /U
但是,相当老式的实用程序的输出tree.com
尚未准备好转换为 Unicode。因此,straightstart "" cmd /U /C "tree>tree_U.txt"
仍然会产生(mojibake)乱码(OEM
编码文件解释为ANSI
)。以下cmd
命令应该可以解决问题:
tree>"%temp%\\auxTree.txt"\nstart "" cmd /U /C "type "%temp%\\auxTree.txt">tree_Unicode.txt"\ndel "%temp%\\auxTree.txt"\n
Run Code Online (Sandbox Code Playgroud)\n顺便说一句,这里是那些漂亮的字符和他们的代码(乱码ANSI
):
Char Unicode OEM ANSI UTF-8 Character_description\n \xe2\x94\x80 U+2500 196 n/a 0xE29480 Box Drawings Light Horizontal\n \xe2\x94\x82 U+2502 179 n/a 0xE29482 Box Drawings Light Vertical\n \xe2\x94\x94 U+2514 192 n/a 0xE29494 Box Drawings Light Up And Right\n \xe2\x94\x9c U+251C 195 n/a 0xE2949C Box Drawings Light Vertical And Right\n
Run Code Online (Sandbox Code Playgroud)\n以及mojibake大小写机制(Python 中的示例,以实现其常见的可理解性):
\n\' \xe2\x94\x80 \xe2\x94\x82 \xe2\x94\x94 \xe2\x94\x9c \'.encode(\'cp437\').decode(\'cp1252\')\n
Run Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\' \xc3\x84 \xc2\xb3 \xc3\x80 \xc3\x83 \'\n
归档时间: |
|
查看次数: |
19854 次 |
最近记录: |