powershell以不帶bom的utf8編碼格式寫入內(nèi)容
背景
在powershell中,我們經(jīng)常使用Get-Content與Out-File去獲取和生成文件內(nèi)容更胖,例如下面示例可將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
配置文件時砂吞,會發(fā)現(xiàn)報錯署恍,因為替換后生成的文件,其編碼格式并不是原來的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))