You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows批处理/PowerShell中使用echo创建UTF-8编码文件的方法

问题原因

chcp修改代码页无效是正常的,你碰到的编码问题是PowerShell 4.0本身的默认输出规则导致的:

  • PowerShell里的echo是Write-Output的别名,用>>做重定向追加时,走的是PowerShell内部的输出编码逻辑,和控制台代码页没有关系,所以改chcp不会影响写入文件的编码
  • PowerShell 4.0版本中,重定向操作符(>/>>)和Out-File的默认编码就是UCS-2 LE BOM,和你用Notepad++查到的编码完全一致。
解决方案

根据你要的UTF-8是否带BOM选对应方法即可,绝大多数场景下读取.env配置的程序都不识别UTF-8 BOM,优先选无BOM UTF-8方案。

方案1:生成带BOM的UTF-8文件

在脚本开头先全局修改Out-File的默认编码,再执行写入操作即可:

$PSDefaultParameterValues['Out-File:Encoding'] = 'UTF8'
echo MyString=Hello >> myconfig.env

也可以单条命令显式指定编码写入,不需要改全局配置:

"MyString=Hello" | Out-File myconfig.env -Encoding UTF8 -Append

方案2:生成无BOM的UTF-8文件(推荐,适配绝大多数配置读取场景)

PowerShell 4.0没有原生提供无BOM UTF8的编码参数,直接调用.NET内置的文件写入方法即可,完全绕开PowerShell自带的编码逻辑:

# 追加写入内容,末尾加Windows标准换行符
[System.IO.File]::AppendAllText(
    "myconfig.env",
    "MyString=Hello`r`n",
    (New-Object System.Text.UTF8Encoding $false)
)

如果是覆盖写入新文件,把AppendAllText替换为WriteAllText即可。

补充说明
  • 如果脚本中存在中文等非ASCII字符,请把.ps1脚本文件本身也保存为UTF-8编码,避免脚本内的字符先出现乱码
  • 批量写入多行内容时,提前把所有内容拼接成完整字符串,带好换行符后一次写入即可,不需要逐行调用写入接口
  • 不要在PowerShell环境里套cmd的编码逻辑处理文件写入,两套环境的编码规则完全独立,chcp只对cmd原生命令和控制台显示生效,管不到PowerShell的管道输出。

内容的提问来源于stack exchange,提问作者MaxP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:18:22