Powershell - 如何读取 Ansi CSV 文件

cod*_*ike 3 powershell powershell-7.2

Notepad++ 表示 CSV 文件是 Ansi 编码的。

Powershell 7 Import-CSV commandlet 有各种 -Encoding 选项,但“Ansi”不是其中之一。

如何让 Powershell 读取此 CSV 而不会损坏它?

-Encoding 的选项有:

  • ASCII码
  • bigendianunicode
  • bigendianutf32
  • 贴牌生产
  • 统一码
  • UTF7
  • UTF8
  • utf8BOM
  • utf8无BOM
  • UTF32

mkl*_*nt0 5

要使用ANSI 编码,即活动遗留系统区域设置(非 Unicode 程序的语言)隐含的特定代码页,例如Windows-1252


两个 PowerShell 版本中的默认字符编码

  • Windows PowerShell是旧版、仅 Windows 附带的 Windows 版本(其最新版本是 v5.1.x),在关键区域默认为活动 ANSI 代码页- 特别是Get-Content/Set-Content以及当 PowerShell 引擎读取源代码时代码 - 但内置 cmdlet 的默认值差异很大;举个例子:Import-Csv默认为 UTF-8;请参阅此答案的底部部分以获取概述。

  • PowerShell (Core)是现代的、按需安装的跨平台版本(从 v6 开始,目前为 v7.2.x),现在幸运的是始终默认为(无 BOM)UTF-8


[1] 早期 PowerShell(核心)版本中缺少值Ansi -Encoding是一个奇怪的遗漏,因为Oem值(针对活动 OEM 代码页)始终存在 -有关背景故事,请参阅GitHub 问题 #6562 。