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

PowerShell 5.1中Out-File追加内容乱码问题及解决验证

PowerShell 5.1中Out-File追加乱码的原理与规范实现

乱码根源:编码不匹配与命令行为差异

1. PowerShell 5.1的默认编码规则

  • Out-File(包括-Append模式)的默认编码是Unicode(UTF-16 LE),不管目标文件原有编码是什么,只要不手动指定-Encoding参数,就会用UTF-16 LE写入内容。
  • Add-Content的行为不同:它会自动检测目标文件的现有编码,然后用相同编码追加内容,无需手动指定编码也能匹配原文件格式。

2. 场景中的具体问题

你用Out-File -Encoding utf8创建的是带BOM的UTF-8文件(PowerShell 5.1中-Encoding utf8默认生成带BOM的UTF-8)。当直接用Out-File -Append追加时,命令会用默认的UTF-16 LE编码写入内容——两种编码的字节流混合后,文本编辑器无法正确解析:

  • 记事本会把UTF-16的双字节字符拆成单个字节显示,出现字符间隔;
  • VS Code则因编码不匹配,无法识别内容,显示为空值。

而Add-Content能正常追加,正是因为它自动识别了原文件的UTF-8编码,用相同格式写入内容。

规范实现方式

根据需求选择以下任意一种方式:

方式一:统一为Out-File指定编码

创建和追加时都明确指定-Encoding参数,确保编码一致:

# 创建带BOM的UTF-8文件
"初始内容" | Out-File -Path "test.txt" -Encoding utf8
# 追加时使用相同编码
"追加内容" | Out-File -Path "test.txt" -Append -Encoding utf8

如果需要无BOM的UTF-8(PowerShell 5.1需Windows 10 1809/Server 2019及以上版本支持),可替换为-Encoding utf8NoBOM。

方式二:全程使用Add-Content

利用Add-Content自动检测编码的特性,创建和追加都用它:

# 创建无BOM的UTF-8文件(默认行为)
"初始内容" | Add-Content -Path "test.txt"
# 追加时自动匹配编码
"追加内容" | Add-Content -Path "test.txt"

若需要带BOM的UTF-8,创建时指定编码即可:

"初始内容" | Add-Content -Path "test.txt" -Encoding utf8
"追加内容" | Add-Content -Path "test.txt"

方式三:Set-Content + Add-Content组合

用Set-Content创建文件时指定编码,追加用Add-Content自动匹配:

# 创建带BOM的UTF-8文件
"初始内容" | Set-Content -Path "test.txt" -Encoding utf8
# 追加内容,自动匹配编码
"追加内容" | Add-Content -Path "test.txt"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:10:15