Out-File似乎在使用UTF-8时强制BOM:
$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath
我怎么能写一个文件在UTF-8没有BOM使用PowerShell?
更新2021
自从10年前我写这个问题以来,PowerShell已经发生了一些变化。检查下面的多个答案,它们有很多有用的信息!
Out-File似乎在使用UTF-8时强制BOM:
$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath
我怎么能写一个文件在UTF-8没有BOM使用PowerShell?
更新2021
自从10年前我写这个问题以来,PowerShell已经发生了一些变化。检查下面的多个答案,它们有很多有用的信息!
当前回答
我认为这不会是UTF,但我只是发现了一个相当简单的解决方案,似乎工作…
Get-Content path/to/file.ext | out-file -encoding ASCII targetFile.ext
对我来说,这导致了一个没有bom文件的utf-8,不管源格式如何。
其他回答
可以使用下面得到UTF8没有BOM
$MyFile | Out-File -Encoding ASCII
我建议只使用Set-Content命令,不需要其他任何命令。
我系统中的powershell版本是:-
PS C:\Users\XXXXX> $PSVersionTable.PSVersion | fl
Major : 5
Minor : 1
Build : 19041
Revision : 1682
MajorRevision : 0
MinorRevision : 1682
PS C:\Users\XXXXX>
所以你需要跟随。
PS C:\Users\XXXXX> Get-Content .\Downloads\finddate.txt
Thursday, June 23, 2022 5:57:59 PM
PS C:\Users\XXXXX> Get-Content .\Downloads\finddate.txt | Set-Content .\Downloads\anotherfile.txt
PS C:\Users\XXXXX> Get-Content .\Downloads\anotherfile.txt
Thursday, June 23, 2022 5:57:59 PM
PS C:\Users\XXXXX>
现在,当我们检查文件,根据截图,它是utf8。 anotherfile.txt
目前正确的方法是使用@Roman Kuzmin在给@M的评论中推荐的解决方案。达德利回答:
[IO.File]::WriteAllLines($filename, $content)
(我还通过去掉不必要的系统名称空间说明来缩短了它——默认情况下它将自动被替换。)
更改多个文件扩展到UTF-8没有BOM:
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
foreach($i in ls -recurse -filter "*.java") {
$MyFile = Get-Content $i.fullname
[System.IO.File]::WriteAllLines($i.fullname, $MyFile, $Utf8NoBomEncoding)
}
我在PowerShell中有相同的错误,并使用此隔离并修复了它
$PSDefaultParameterValues['*:Encoding'] = 'utf8'