从 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 文件并指定分隔符,则无论编码如何,您都会获得所需的行为。
我正在通过 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 文件并指定分隔符,则无论编码如何,您都会获得所需的行为。