PowerShell将UTF-8 CSV转UTF-16时部分字符编码异常求助
UTF-8转UTF-16编码时字符异常的原因及解决方法
问题原因
你使用Get-Content读取UTF-8文件时,PowerShell默认会采用当前系统的ANSI编码解析文件(除非UTF-8文件带有BOM)。这种默认行为会导致原本正确的UTF-8字符被错误解码,后续通过Set-Content转存为UTF-16时,错误的解码结果就被保留下来,出现Meriç变成Meriç的乱码。而Z�rcher本身是UTF-8字符被错误显示的结果,用ANSI解析时恰好“修正”为正确的Zürcher,这只是巧合。
解决方法
方法1:明确指定读取编码为UTF-8
修改代码,在Get-Content中添加-Encoding UTF8参数,强制以UTF-8编码读取文件,避免系统默认编码干扰:
Get-Content -Path "C:\tmp\PSProjekt\schueler.csv" -Encoding UTF8 | Set-Content -Path "C:\tmp\PSProjekt\lol\schueler.csv" -Encoding Unicode -Force
方法2:使用.NET类直接读写(更高效可靠)
跳过PowerShell的文本解析层,直接用System.IO.File类处理编码转换,避免中间环节的编码错误:
# 读取UTF-8内容 $utf8Text = [System.IO.File]::ReadAllText("C:\tmp\PSProjekt\schueler.csv", [System.Text.Encoding]::UTF8) # 写入为UTF-16(Unicode)编码 [System.IO.File]::WriteAllText("C:\tmp\PSProjekt\lol\schueler.csv", $utf8Text, [System.Text.Encoding]::Unicode)
内容的提问来源于stack exchange,提问作者Jamie_Gerber
相关产品推荐
相关产品推荐

