我们收到编码为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"
对于此问题的任何见解,将不胜感激。
答案 0 :(得分:0)
PowerShell的Import-CSV
和Export-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或类似的系统。