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

使用PowerShell批量替换CSV字符串后符号与Emoji变问号,如何解决?

解决PowerShell批量替换CSV时Emoji/特殊符号变问号的问题

问题核心是默认编码不支持Unicode字符:Get-Content和Set-Content默认使用系统本地编码(通常是ANSI),这种编码无法识别Emoji及大部分非ASCII特殊符号,读取或写入时会将其替换为问号。

修改后的脚本

直接在读取和写入时指定UTF-8编码即可解决:

$DirPath = "C:\Users\Documents\*.csv"
Get-ChildItem $DirPath -Recurse |
ForEach-Object {
    Get-Content $_ -Encoding UTF8 | ForEach-Object { $_ -Replace 'X','Y' } |
    Set-Content $_ -Encoding UTF8
}

关键说明

  • -Encoding UTF8:强制以UTF-8编码读取和写入文件,UTF-8支持所有Unicode字符(包括Emoji)。
  • 改用-Replace而非字符串的.Replace():两者功能相近,但-Replace是PowerShell原生正则替换命令,更适配批量文本处理场景。

版本适配补充

  • PowerShell 7及以上:若需生成不带BOM(字节顺序标记)的UTF-8文件,可替换为-Encoding UTF8NoBOM,避免部分程序读取时出现异常。
  • 原文件为其他Unicode编码:如果CSV原本是UTF-16等编码,需先匹配原编码读取,再转成目标编码写入。例如原文件是UTF-16:
    Get-Content $_ -Encoding Unicode | ForEach-Object { $_ -Replace 'X','Y' } |
    Set-Content $_ -Encoding UTF8
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:52:08