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

时间:2019-08-19 13:42:50

标签: powershell csv utf-8 character-encoding

我们收到编码为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"

对于此问题的任何见解,将不胜感激。

2 个答案:

答案 0 :(得分:0)

PowerShell的Import-CSVExport-CSV cmdlet支持-Encoding参数(链接到Microsoft Docs),因此您可以替换行

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

使用

Import-CSV -Path $File -Encoding Unicode | Export-CSV -Path $New_File -Encoding UTF8

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

答案 1 :(得分:0)

由于您要做的只是转换字符编码,因此以字符串形式进行读写将是最简单的。与往常一样,读取文本文件,其字符编码为:

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

在许多环境中,当UCS-2成为“ it”字符时,对UTF-16进行“ Unicode”编码的编码就可以追溯到Unicode字符集的初期。然后爆炸发生了,UTF-16从UCS-2诞生。自那时以来发明的系统在表示UTF-16和UTF-16的“ Unicode”是深奥而难以理解的情况下,相当合理地使用UTF16或类似的系统。