Powershell 如何在不丢失逗号的情况下将UTF16LE CSV文件转换为UTF8

Powershell 如何在不丢失逗号的情况下将UTF16LE CSV文件转换为UTF8,powershell,csv,utf-8,character-encoding,Powershell,Csv,Utf 8,Character Encoding,我们收到编码为UTF16LE的Cognos报告。我正在尝试创建一个powershell脚本,以将UTF16LE文件转换为UTF8。到目前为止,我的逻辑确实在目录中循环(无论我将脚本放在哪个目录中,因为硬编码包含日期/数字的目录名会导致错误),并将文件保存为UTF-8;但是,分隔符似乎已被删除 我相信这可能是由于我读取数据的方式,因为我没有指定UTF16LE;然而,我不确定有什么办法可以做到这一点。到目前为止,我的剧本是: $files = Get-ChildItem $dt = get-dat

我们收到编码为UTF16LE的Cognos报告。我正在尝试创建一个powershell脚本,以将UTF16LE文件转换为UTF8。到目前为止,我的逻辑确实在目录中循环(无论我将脚本放在哪个目录中,因为硬编码包含日期/数字的目录名会导致错误),并将文件保存为UTF-8;但是,分隔符似乎已被删除

我相信这可能是由于我读取数据的方式,因为我没有指定UTF16LE;然而,我不确定有什么办法可以做到这一点。到目前为止,我的剧本是:

$files = Get-ChildItem 
$dt = get-date -Format yyyyMMdd
$extension = "_" + "$dt" + "_utf8.csv"
ForEach ($file in $files) {
  $file_name = $file.basename
  $new_file = "$file_name" + "$extension"
  echo $new_file
  #Get-Content $file | Set-Content -Encoding UTF8 $new_file
}

Read-Host -Prompt "Press Enter to Close Window"
如果您能深入了解此问题,我们将不胜感激。

PowerShell和cmdlet支持
-Encoding
参数(指向Microsoft文档的链接),因此您可以替换您的行

Get-Content $file | Set-Content -Encoding UTF8 $new_file

(UTF16LE编码是PowerShell所称的“Unicode”;UTF16BE是“BigEndianUnicode”。默认为UTF8NoBOM,UTF8不带字节顺序标记。)

PowerShell和cmdlet支持
-encoding
参数(链接到Microsoft文档),因此您可以替换行

Get-Content $file | Set-Content -Encoding UTF8 $new_file


(UTF16LE编码是PowerShell所称的“Unicode”;UTF16BE是“BigEndianUnicode”。默认值是UTF8NoBOM,UTF8不带字节顺序标记。)

因为您只需要转换字符编码,所以作为字符串进行读写是最简单的。与往常一样,读取带有字符编码的文本文件:

Get-Content -Encoding Unicode $file | Set-Content -Encoding UTF8 $new_file

UTF-16的“Unicode”编码可以追溯到Unicode字符集的初期,当时UCS-2将成为许多环境中的“it”。然后爆炸发生了,UTF-16从UCS-2诞生。从那时起发明的系统相当合理地使用UTF16或类似的标准,因为它们意味着UTF-16和UTF-16的“Unicode”是深奥和无法估计的

因为您只需要转换字符编码,所以作为字符串进行读写是最简单的。与往常一样,读取带有字符编码的文本文件:

Get-Content -Encoding Unicode $file | Set-Content -Encoding UTF8 $new_file
UTF-16的“Unicode”编码可以追溯到Unicode字符集的初期,当时UCS-2将成为许多环境中的“it”。然后爆炸发生了,UTF-16从UCS-2诞生。从那时起发明的系统相当合理地使用UTF16或类似的标准,因为它们意味着UTF-16和UTF-16的“Unicode”是深奥和无法估计的