You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动