You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将UTF16LE格式CSV转UTF8且保留逗号?PowerShell脚本求助

解决Cognos UTF16LE转UTF8时逗号分隔符丢失的问题

嘿,我完全懂你碰到的这个坑——从Cognos导出的UTF-16LE编码报告转成UTF8后,逗号分隔符居然丢了!你猜的一点没错,问题根源就是没指定正确的编码读取源文件。PowerShell默认的编码解析UTF-16LE内容时会出错,把逗号这类字符当成无效编码给吞掉了。

修正思路

核心就是给Get-Content加上-Encoding Unicode参数(PowerShell里Unicode对应的就是UTF-16LE编码),确保读取源文件时能正确解析所有字符,包括逗号分隔符,然后再用Set-Content -Encoding UTF8输出成目标文件。

修正后的完整脚本

# 获取脚本所在目录下的所有CSV文件(加过滤避免处理无关文件)
$files = Get-ChildItem -Filter *.csv
$dateSuffix = Get-Date -Format yyyyMMdd
$newFileSuffix = "_$dateSuffix_utf8.csv"

foreach ($file in $files) {
    $newFileName = "$($file.BaseName)$newFileSuffix"
    Write-Host "正在转换文件:$($file.Name) → $newFileName"
    
    # 关键:指定源编码为UTF-16LE(PowerShell中对应Unicode)读取,再写入UTF8
    Get-Content -Path $file.FullName -Encoding Unicode | Set-Content -Path $newFileName -Encoding UTF8
}

Read-Host -Prompt "转换完成!按Enter键关闭窗口"

额外提示

  • 记得PowerShell的编码别名:Unicode是UTF-16LE,BigEndianUnicode才是UTF-16BE,别搞混了
  • 如果你的CSV包含非常特殊的字符,也可以尝试用Out-File -Encoding UTF8替代Set-Content,效果差不多,但Set-Content处理文本文件更轻量
  • 加上-Filter *.csv能避免误操作脚本所在目录的其他文件,更安全

内容的提问来源于stack exchange,提问作者need_java

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:51:32