powershell以不带bom的utf8编码格式写入内容

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而是带bomutf8

解决方法

  1. 将powershell版本升级至6+

  2. 如果配置文件中不包含中文和特殊字符

    (Get-Content -encoding utf8 C:\\default.ini) -replace '@host@', '127.0.0.1' | Out-File -encoding ASCII C:\\default.ini
    
  1. 将上面的脚本替换成下面这句

    [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))
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容