求助:使用PowerShell修改文件内容后出现特殊字符
解决PowerShell修改XML文件后出现乱码的问题
你的脚本执行后出现乱码(������),核心原因是文件编码不匹配:Get-Content和Set-Content默认使用系统ANSI编码读写,但XML文件通常采用UTF-8编码(带BOM或不带),读写编码不一致就会导致乱码。
修正后的脚本
$configFiles = Get-ChildItem -Include *.xml -Recurse $oldString = "AppointmentRequest" $newString = "ShiftRequest" foreach ($file in $configFiles) { # 指定UTF-8编码检查文件是否包含目标字符串,避免编码问题导致误判 if (Select-String -Path $file.PSPath -Pattern $oldString -Encoding utf8) { # 统一用UTF-8编码完成读取、替换、写入流程 (Get-Content -Path $file.PSPath -Encoding utf8) | Foreach-Object { $_ -replace $oldString, $newString } | Set-Content -Path $file.PSPath -Encoding utf8 } }
关键改动说明
- 给
Get-Content和Set-Content添加-Encoding utf8参数,强制使用UTF-8编码读写,匹配XML文件的常用编码标准。 - 给
Select-String也加上-Encoding utf8,避免因编码差异漏判文件是否包含目标字符串。 - 优化变量命名(
$oldString/$newString),提升脚本可读性。
如果你的XML是UTF-8不带BOM格式,PowerShell 5.1及以上版本可替换为-Encoding utf8NoBOM,确保写入后保持无BOM格式;若文件是其他编码(如UTF-16),对应替换为utf16即可。
内容的提问来源于stack exchange,提问作者Alexander Samuel
相关产品推荐
相关产品推荐

