在使用UTF-8时,Out-File
似乎会强制执行物料清单:
$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath
如何使用PowerShell在没有BOM的情况下以UTF-8格式编写文件?
更新2021
自从我10年前写了这个问题以来,PowerShell发生了一些变化。检查下面的多个答案,他们有很多好的信息!
发布于 2011-04-08 23:02:54
使用.NET的UTF8Encoding
类并将$False
传递给构造函数似乎是可行的:
$MyRawString = Get-Content -Raw $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($MyPath, $MyRawString, $Utf8NoBomEncoding)
发布于 2016-12-02 08:26:55
我认为这不是UTF,但我只是找到了一个非常简单的解决方案,似乎是有效的…
Get-Content path/to/file.ext | out-file -encoding ASCII targetFile.ext
对我来说,这导致了一个没有bom文件的utf-8文件,而不管是什么源格式。
发布于 2018-04-24 01:48:31
当使用Set-Content
而不是Out-File
时,您可以指定编码Byte
,它可用于将字节数组写入文件。这与不发出物料清单的自定义UTF8编码相结合,提供了所需的结果:
# This variable can be reused
$utf8 = New-Object System.Text.UTF8Encoding $false
$MyFile = Get-Content $MyPath -Raw
Set-Content -Value $utf8.GetBytes($MyFile) -Encoding Byte -Path $MyPath
与使用[IO.File]::WriteAllLines()
或类似的不同之处在于,它应该可以很好地处理任何类型的项目和路径,而不仅仅是实际的文件路径。
https://stackoverflow.com/questions/5596982
复制相似问题