Notepad++表示CSV文件是Ansi编码的。
Powershell 7 Import CSV commandlet有各种-Encoding选项,但"Ansi"不是其中之一。
如何让Powershell在不损坏CSV的情况下读取它?
-编码的选项有:
- ascii
- bigendianonicode
- bigendianutf32
- oem
- unicode
- utf7
- utf8
- utf8OM
- utf8NoBOM
- utf32
使用ANSI编码,即活动遗留系统区域设置(非Unicode程序的语言(所暗示的特定代码页,如Windows-1252:
-
在Windows PowerShell中:
-Encoding Default
-
在您正在使用的PowerShell(Core(7+中,
Default
现在指的是UTF-8,因此还需要做更多的工作:-
在PowerShell中v7.3-:
-Encoding ([cultureinfo]::CurrentCulture.TextInfo.ANSICodePage)
-
在PowerShell中v7.4+:[1]
-Encoding Ansi
-
两个PowerShell版本中的默认字符编码:
-
Windows PowerShell ,旧版,仅限Windows,附带Windows版本(其最新版本和最后一个版本为v5.1.x(,默认为键区域中的活动ANSI代码页,特别是
Get-Content
/Set-Content
以及PowerShell引擎读取源代码时,但的默认值在内置cmdlet中差异很大;示例:Import-Csv
默认为UTF-8;有关概述,请参阅此答案的底部部分。 -
PowerShell(核心( ,现代的、按需安装的跨平台版本(从v6开始,目前为v7.2.x(,幸运的是,现在始终默认为(无BOM(UTF-8
[1]早期PowerShell(Core(版本中缺少Ansi
-Encoding
值是一个奇怪的遗漏,因为Oem
值(用于活动OEM代码页(一直存在-有关背景故事,请参阅GitHub问题#6562