如何将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
相关产品推荐
相关产品推荐

