【问题标题】:How to convert UTF16LE CSV file to UTF8 without losing Commas如何在不丢失逗号的情况下将 UTF16LE CSV 文件转换为 UTF8
【发布时间】:2019-08-19 13:42:50
【问题描述】:

我们收到编码为 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 csv utf-8 character-encoding


    【解决方案1】:

    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 没有字节顺序标记。)

    【讨论】:

      【解决方案2】:

      由于您要做的只是转换字符编码,因此以字符串形式读取和写入将是最直接的。与往常一样,使用写入时使用的字符编码读取文本文件:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        相关资源
        最近更新 更多