如何在PowerShell中解决含法语字符的CSV文件编码问题?
解决PowerShell处理含法语字符CSV的编码问题
你的问题核心是原CSV的编码与PowerShell读取/保存时的编码不匹配,再加上Excel对无BOM UTF-8的兼容性差。之前用记事本转码有效,是因为记事本保存的UTF-8带BOM,而你原来的PowerShell命令没处理好这两点,所以没效果。
给你几个可行的PowerShell解决方法:
方法1:直接转换CSV编码(适配Excel和脚本)
如果原CSV是Windows默认的ANSI编码(法语系统通常对应Windows-1252),用以下命令转成带BOM的UTF-8(Excel能完美识别):
Windows PowerShell(旧版)
# 以系统默认ANSI编码读取,保存为带BOM的UTF-8 Get-Content C:\sdk\userExport.csv -Encoding Default | Set-Content -Encoding UTF8BOM c:\sdk\newuserExport.csv # 用CSV专用命令更可靠(避免格式错乱) Import-Csv C:\sdk\userExport.csv -Encoding Windows1252 | Export-Csv c:\sdk\newuserExport.csv -Encoding UTF8 -NoTypeInformation
PowerShell 7+(Core版)
# 指定源编码为Windows-1252读取,保存为带BOM的UTF-8 Get-Content C:\sdk\userExport.csv -Encoding Windows1252 | Set-Content -Encoding UTF8BOM c:\sdk\newuserExport.csv # CSV专用命令 Import-Csv C:\sdk\userExport.csv -Encoding Windows1252 | Export-Csv c:\sdk\newuserExport.csv -Encoding UTF8BOM -NoTypeInformation
方法2:脚本内直接正确读取CSV(无需提前转文件)
如果不想提前转文件,在PowerShell脚本里读取CSV时指定正确的源编码,就能直接处理法语字符:
# 读取CSV时指定原编码为Windows-1252 $userList = Import-Csv C:\sdk\userExport.csv -Encoding Windows1252 # 后续处理$userList中的用户名,法语字符会正常显示和使用
为什么原来的命令没用?
Get-Content未指定源编码:Windows PowerShell默认用系统ANSI编码读取,但如果读取时编码匹配错误,法语字符会在读取阶段就转成乱码,再保存UTF-8也无法恢复。- Windows PowerShell中
Set-Content -Encoding utf8生成的是无BOM的UTF-8,Excel对这种编码识别很差,而记事本保存的UTF-8是带BOM的,所以之前记事本操作有效。
内容的提问来源于stack exchange,提问作者lakeek
相关产品推荐
相关产品推荐

