powershell以不带bom的utf8编码格式写入内容
背景
在powershell中,我们经常使用Get-Content与Out-File去获取和生成文件内容,例如下面示例可将C:\\default.ini
文件中的@host@
替换为127.0.0.1
(Get-Content -encoding utf8 C:\\default.ini) -replace '@host@', '127.0.0.1' | Out-File -encoding utf8 C:\\default.ini
但是如果使用代码读取C:\\default.ini
配置文件时,会发现报错,因为替换后生成的文件,其编码格式并不是原来的utf8
而是带bom
的utf8
解决方法
将powershell版本升级至6+
-
如果配置文件中不包含中文和特殊字符
(Get-Content -encoding utf8 C:\\default.ini) -replace '@host@', '127.0.0.1' | Out-File -encoding ASCII C:\\default.ini
-
将上面的脚本替换成下面这句
[System.IO.File]::WriteAllLines('C:\\default.ini',(Get-Content -encoding utf8 'C:\\default.ini').Replace('@host@', '127.0.0.1'), (New-Object System.Text.UTF8Encoding $False))