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

PowerShell Set-Content UTF8编码致波兰语特殊字符乱码问题求助

问题:PowerShell处理含波兰语特殊字符的HTML模板后出现乱码

以下是使用的PowerShell脚本片段:

$template = Get-Content "./template/temaplate.htm" -raw
$html = $template.Replace('{{imie}}', $imie).Replace('{{nazwisko}}', $nazwisko).Replace('{{stanowisko}}', $stanowisko).Replace('{{mobile}}', $mobile).Replace('{{kapital}}', $kapital).Replace('{{telefon}}', $telefon)
Set-Content -Encoding UTF8 "output/podpis.htm" -Value $html

模板文件temaplate.htm包含波兰语特殊字符(如“Sąd”“Wrocław”),执行脚本后这些字符变为乱码“SÄ…d”“WrocĹ‚aw”。模板已设置<meta charset="UTF-8">,请问该问题的原因是什么?


原因分析

核心问题出在文件读取阶段的编码不匹配:

  • PowerShell的Get-Content cmdlet默认会根据当前系统的区域设置选择编码(比如Windows波兰语区域默认是cp1250编码)。
  • 你的模板文件是UTF-8编码保存的,但Get-Content用非UTF-8的默认编码读取时,会把UTF-8的多字节特殊字符错误解析成单字节的ANSI字符,导致字符损坏。
  • 后续写入时虽然指定了-Encoding UTF8,但损坏的字符已经生成,最终输出文件里就会出现乱码。

简单来说:读取时用错误编码把UTF-8文件转成了错误的字符序列,写入时只是把错误序列用UTF-8保存,自然无法恢复原本的特殊字符。


修复方法

在Get-Content命令中明确指定-Encoding UTF8参数,保证读取和写入使用一致的UTF-8编码:

$template = Get-Content "./template/temaplate.htm" -raw -Encoding UTF8
$html = $template.Replace('{{imie}}', $imie).Replace('{{nazwisko}}', $nazwisko).Replace('{{stanowisko}}', $stanowisko).Replace('{{mobile}}', $mobile).Replace('{{kapital}}', $kapital).Replace('{{telefon}}', $telefon)
Set-Content -Encoding UTF8 "output/podpis.htm" -Value $html

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:08