使用PowerShell的Get-Content保留表情符号问题求助
解决PowerShell读写文件时表情符号丢失的问题
这个问题我太熟悉了!你遇到的表情变成问号的情况,本质是文件读写阶段的编码不匹配导致的——PowerShell(尤其是Windows PowerShell 5.1)默认的文件编码并不支持完整的Unicode表情符号,把它们当成了无法识别的字符,最终替换成了问号。
问题根源
当你用Get-Content读取文件时,默认会使用系统的ANSI编码(或UTF-16,取决于PowerShell版本);而Out-File默认也是用非UTF-8的编码写入,这就导致原本从RSS源拿到的Unicode表情符号在读写过程中被损坏了。
解决方案:显式指定UTF-8编码
只需要在读写文件时明确指定-Encoding UTF8参数,就能完整保留表情符号了。下面是修正后的代码:
# 读取文件时指定UTF-8编码,确保表情符号不丢失 $content = (Get-Content -Path $file -Encoding UTF8) -join "`n" $toWrite = $top_line + $toWrite + $content # 写入文件时同样指定UTF-8编码,保证内容正确保存 $toWrite | Out-File -FilePath $file -Encoding UTF8
额外注意事项
- 如果你使用的是PowerShell 7及以上版本,默认编码已经改为UTF-8,但为了兼容性(比如和旧版本脚本兼容),还是建议显式指定编码。
- 如果你的CSV文件原本是用其他编码创建的,第一次读取时也要确保用对应的编码,之后统一用UTF-8维护即可。
内容的提问来源于stack exchange,提问作者Georodin




