我正在递归地运行一个关于XML文件的powershell脚本来搜索和替换文本。代码在搜索和替换文本时工作正常。但是在某些文件中还有其他语言文本,如fréquentes,在运行脚本后会更改为fréquentes。我一直在脚本中使用UTF8编码。关于如何保留encoading的任何指针?
$content| Foreach-Object{$_ -replace 'test1' , 'testing'`
-replace 'test2' , 'testing' }| Out-File file.FullName -Encoding utf8
答案 0 :(得分:3)
你似乎忽略了XML文件的编码,这似乎是拉丁文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
然而,这可能导致不同计算机之间的编码不同,所以要小心。我几乎只将它用于我知道在系统的遗留代码页中的文件,或用于快速的一次性脚本。