CSV格式不正确?

我使用Powershell中的EXPORT-CSV生成CSV,然后将其提供给Perl脚本。 但Perl无法导入文件。

我已经validation了CSV文件与工作版本(已从相同的Perl脚本,而不是PowerShell导出),没有任何区别。 彩色标签是非常相同的,它们都以分号作为分隔符。 如果我在Excel中打开文件,则每行中的第一个单元格中的所有内容都将结束(这意味着我必须执行文本到颜色)。 工作文件从一开始就在不同的单元格中结束。

添加到混乱:当我在记事本中打开文件,并复制/粘贴到新文件的内容导入工程!

那么,我错过了什么? 是否有“隐藏”的属性,我不能用记事本发现? 我必须更改编码types吗?

请帮忙:)

为了更好地查看您的CSV文件,请尝试使用Notepad ++ 。 这会告诉你在状态栏中的文件编码。 同时打开隐藏的字符(查看>显示符号>显示所有字符)。 这将显示是否只有换行,或回车+换行,制表符与空格等…您也可以从编码菜单中更改文件编码。 这可能会帮助您识别差异。 记事本不显示任何这些信息。

更新 – 以下是如何在Windows中将文本文件转换为Unix格式的代码:

 $allText = [IO.File]::ReadAllText("C:\test.csv") -replace "`r`n?", "`n" $encoding = New-Object System.Text.ASCIIEncoding [IO.File]::WriteAllText("C:\test2.csv", $allText, $encoding) 

或者你可以使用Notepad ++(Edit> EOL Conversion> Unix Format)。

当你使用export-csv时,这可能是一个编码问题

默认是ASCII ,通常情况下应该可以,但是请尝试在Export-CSV命令中设置-Encoding UTF8

从CPAN文本:: CSV :

 use Text::CSV; my @rows; my $csv = Text::CSV->new ( { binary => 1 } ) # should set binary attribute. or die "Cannot use CSV: ".Text::CSV->error_diag(); open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!"; while ( my $row = $csv->getline( $fh ) ) { $row->[2] =~ m/pattern/ or next; # 3rd field should match push @rows, $row; } $csv->eof or $csv->error_diag(); close $fh; 

不要试图自己parsingCSV,乍一看似乎很容易,但有很多深入的陷阱。

Excel倾向于认为以.csv格式保存的文件确实是用逗号分隔的。 但是,似乎你正在使用分号。 您可以尝试切换到逗号,或者如果这不是一个选项,请尝试将扩展名更改为.txt。 如果你使用前者,Excel应该自动识别它,而后者则会在加载文件时通过导入向导。

鉴于通过其他职位发现了什么,我认为你最好的select是:

  1. 转换为CSVstring(使用unix-y回车而不是Windows)
  2. 将它发送到一个文件,确保编码不是ASCII。

 $str = $object | convertto-csv -notypeinformation | foreach-object { $_ -replace "`"","" } # 

foreach-object是删除convertto-csv添加的额外引号的破解。 如果您的数据可能有双引号,则需要查看备选scheme。

 $str | out-file -filepath "path\to\newcsv" -encoding UTF8