Powershell搜索和替换中的编码问题

encoding issue in powershell search and replace

我是 运行 在 XML 文件上递归搜索和替换文本的 powershell 脚本。该代码可以很好地搜索和替换文本。但是在某些文件中有其他语言的文本,例如 fréquentes,在 运行 脚本之后更改为 fréquentes。我一直在脚本中使用 UTF8 编码。关于如何保留编码的任何指示?

$content| Foreach-Object{$_ -replace 'test1' , 'testing'`
                            -replace 'test2' , 'testing' }| Out-File file.FullName -Encoding utf8   

您似乎忽略了 XML 文件的编码,它似乎是 Latin 1。XML 文件在开头指定了它们的编码(或者,如果没有,它们将是自动检测为 UTF-8、UTF-16 或 UTF-32):

<?xml version='1.0' encoding='utf-8'?>

所以在我看来,您使用正确的编码读取了内容,但是用 UTF-8 编写的文件与声明的不匹配。

您可以使用 XML API 来更改文件,这可能更可取,或者只需将您的 Out-File 更改为

Out-File -Encoding Default

但是,这会导致不同计算机之间的编码不同,所以要小心。我几乎只将它用于我知道在系统遗留代码页中的文件,或者用于快速的一次性脚本。