xml - 如何使用 PowerShell 查找和替换字符串 - 东欧字符问题

标签 xml powershell

我正在编写一个 PowerShell 脚本来查找和替换包含东欧字符的 xml 标记并将它们更改为英文。

我的源文件以 UTF-8 编码。

我的代码:

$content = [System.IO.File]::ReadAllText("file.xml").Replace("<Číslo_zboží>","<Code>")
[System.IO.File]::WriteAllText("file.xml", $content)

虽然我可以成功地找到并用标准英文字符替换标签,但那些包含东欧字符的标签会被 PowerShell 忽略。非常感谢您的建议。

最佳答案

[System.IO.File] 类的方法默认为(BOM-less)UTF-8,所以假设 file.xml是 UTF-8 编码的(无论是否使用 BOM),读取和写入该文件应按预期工作,但请注意写入将导致没有 BOM。

我怀疑问题是您的源文件,尽管是 UTF-8 编码的,但缺少 BOM ,Windows PowerShell(不幸的是)需要它来识别 UTF-8 编码。

在没有 BOM 的情况下,Windows PowerShell 将源文件解释为“ANSI”编码,这是系统的旧系统区域设置所隐含的单字节扩展 ASCII 编码。
因此,即使您的脚本的实际编码是 UTF-8,缺少 BOM 意味着 Windows PowerShell 将误解脚本中的非 ASCII 字符,因此基于脚本中定义的字符串文字的字符串操作将无法按预期工作 .

为安全起见,请始终使用 BOM 创建 UTF-8 编码的 PowerShell 脚本。

请注意,即将推出的跨平台 PowerShell Core will likely switch to (BOM-less) UTF-8 as the default ,但它将继续识别 BOM,因此使用 BOM 保存 UTF-8 脚本应该是一种面向 future 的方法。

关于xml - 如何使用 PowerShell 查找和替换字符串 - 东欧字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958670/

相关文章:

android - 如何将 imageView 设置为不固定在某个位置

Android SlidingPaneLayout 淡化错误 View

Powershell 和 TFS : tf. exe 与 Power tools TFS cmdlet?

powershell - 使用 PowerShell 函数返回复杂对象?

java - 使用 SAX 解析器解析 UTF-8 XML 文件时出现问题

java - JDom XML 过滤

xml - 用于标识后面没有内容的最后一个元素的表达式

powershell - 如何在nodeName中使用 "*"

wpf - 使用 Add_SelectedValueChanged() 从 ComboBox 分配值

powershell - 如何在 powershell 中的 try...catch block 中正确抛出数组