По какой-то причине, вызовы WriteAllLines
все еще производят спецификацию для меня, с аргументом BOMless UTF8Encoding
и без него. Но для меня работало следующее:
$bytes = gc -Encoding byte BOMthetorpedoes.txt
[IO.File]::WriteAllBytes("$(pwd)\BOMthetorpedoes.txt", $bytes[3..($bytes.length-1)])
Мне пришлось сделать путь к файлу абсолютным, чтобы он работал. В противном случае он написал файл на моем рабочем столе. Кроме того, я полагаю, это работает, только если вы знаете, что ваша спецификация составляет 3 байта. Я не знаю, насколько надежно ожидать данный формат / длину спецификации на основе кодирования.
Также, как написано, это, вероятно, работает только в том случае, если ваш файл вписывается в массив powershell, который, похоже, имеет предел длины некоторого значения ниже [int32]::MaxValue
на моей машине.