我正在编写PowerShell脚本来查找和替换包含东欧字符的xml标记,并将其更改为英文。
我的源文件以UTF-8编码。
我的代码:
$content = [System.IO.File]::ReadAllText("file.xml").Replace("<Číslo_zboží>","<Code>")
[System.IO.File]::WriteAllText("file.xml", $content)
虽然我可以使用标准英文字符成功查找和替换标记,但PowerShell会忽略包含东欧字符的标记。非常感谢你的建议。
答案 0 :(得分:1)
SubjectTerm类的方法默认为(无BOM)UTF-8,因此假设file.xml
是UTF-8编码的(无论是否有BOM),阅读和编写该文件应该按预期工作,但请注意编写将导致 no BOM。
我怀疑问题是您的源文件,尽管是UTF-8编码,缺少BOM ,Windows PowerShell(不幸的是)需要识别UTF-8编码。
如果没有BOM,Windows PowerShell会将您的源文件解释为&#34; ANSI&#34; -encoded,这是系统的遗留系统区域设置所隐含的单字节扩展ASCII编码。 因此,即使您的脚本的实际编码是UTF-8,缺少BOM意味着Windows PowerShell将误解解脚本中的非ASCII字符,以便字符串操作基于在脚本中定义的字符串文字将无法按预期工作。
为安全起见,请始终使用BOM 创建UTF-8编码的PowerShell脚本。
请注意即将推出的跨平台PowerShell Core [System.IO.File]
,但它会继续识别BOM,因此使用 BOM保存UTF-8脚本应该是一种面向未来的方法。