从 UTF-8 Powershell 中抑制 BOM

Suppress BOM from UTF-8 Powershell

我正在通过 PowerShell 2 系统地重命名一堆文件,我想将新旧文件映射输出到 UTF-8 制表符分隔的输出文件。问题是 Export-Csv(和其他输出方法)将 BOM 强制到该 tsv 文件的开头并中断输出,阻止项目被正确的制表符分隔并且只是将所有内容都塞进第一列。我想如果我可以抑制 BOM,这个问题就会得到解决,但欢迎任何其他建议。下面的代码。

Set-Location -Path ""
$destLoc = ""
$countRef = [ref] 0
Get-ChildItem -Filter *.pdf -Recurse | ForEach-Object {
  $newFullName = '{0}\{1}.pdf' -f $destLoc, ++$countRef.Value
  Copy-Item -LiteralPath $_.FullName -Destination $newFullName
  New-Object PSCustomObject -Property @{
    Old = $_.FullName
    New = $newFullName
  }
} | Export-Csv -Delimiter "`t" -Encoding UTF8 NameMappings.tsv

为了后代,任何遇到与我相同问题的人,都不要让 excel 自动处理传入的 tsvs 文本到列导入。问题是 BOM 与自动格式化混淆,但如果您手动打开 tsv 文件并指定分隔符,则无论编码如何,您都会获得所需的行为。