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

使用PowerShell导出对象为JSON时文件开头出现异常字符问题

你遇到的JSON文件开头异常字符是UTF-16 LE(小端序)的字节顺序标记(BOM),由PowerShell的Out-File cmdlet默认编码规则导致,具体逻辑如下:

  • PowerShell 5.1及更早版本中,Out-File的默认输出编码为UTF-16 LE(系统标注为"Unicode"编码),写入文件时会自动在内容开头添加对应编码的BOM(值为0xFF 0xFE,也就是你看到的两个乱码字符)。
  • ConvertTo-Json输出的是纯UTF-8格式的字符串内容,但经过Out-File时会被强制重新转码为UTF-16 LE并添加BOM,Node.js默认按UTF-8编码读取文件时无法识别该BOM,就会报JSON解析错误。

修复方案

  • 如果你使用PowerShell 7及以上版本,直接给Out-File指定无BOM的UTF-8编码即可:
$eventStartList | ConvertTo-Json | Out-File 'C:\scheduledEventStart.json' -Encoding utf8NoBOM
  • 如果你使用PowerShell 5.1版本,没有内置的utf8NoBOM参数,可以调用.NET的文件写入方法实现无BOM的UTF-8输出:
$jsonContent = $eventStartList | ConvertTo-Json
[System.IO.File]::WriteAllText('C:\scheduledEventStart.json', $jsonContent, [System.Text.Encoding]::UTF8)

额外优化建议

你当前读取JSON的逻辑遇到空文件时会触发ConvertFrom-Json报错,可以加个非空判断避免异常:

$eventPath = 'C:\scheduledEventStart.json'
[System.Collections.ArrayList]$eventStartList =@()
if (Test-Path $eventPath) {
    $rawContent = Get-Content $eventPath -Raw
    if (-not [string]::IsNullOrWhiteSpace($rawContent)) {
        $EventStart = $rawContent | ConvertFrom-Json
        $eventStartList += $EventStart
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:54:01