Похоже, что куча ответов здесь не учитывает кодировку файлов.
Я только что столкнулся с этой проблемой по разным другим причинам, но
echo $null > $file
$null > $file
оба производят файл UTF-16-LE, в то время как
New-Item $file -type file
производит файл UTF-8.
По любой причине fc > $file
и fc >> $file
, похоже, также создают файлы UTF-8.
Out-File $file -encoding utf8
дает вам файл UTF-8-BOM, в то время как
Out-File $file -encoding ascii
дает вам файл UTF-8. Другие допустимые (но непроверенные) кодировки, которые поддерживает Out-File: [[-Encoding] {неизвестная строка | | unicode | bigendianunicode | utf8 | utf7 | utf32 | ascii | по умолчанию | oem}]. Вы также можете подключить что-то к Out-File, чтобы дать файлу некоторые текстовые данные для хранения, а также флаг -append. Например:
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
этот пример по какой-то причине не обновляет метку времени, но этот по какой-то причине:
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
Хотя у него есть побочный эффект добавления “foo” в конец файла.
Если вы не уверены в том, какая у вас кодировка, я обнаружил, что у VS-Code есть замечательная возможность, где в правом нижнем углу написано, что это за кодировка. Я думаю, что Блокнот++ также имеет похожую возможность.