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

时间:2016-07-22 09:14:54

标签: powershell powershell-v2.0 powershell-v3.0

我正在递归地运行一个关于XML文件的powershell脚本来搜索和替换文本。代码在搜索和替换文本时工作正常。但是在某些文件中还有其他语言文本,如fréquentes,在运行脚本后会更改为fréquentes。我一直在脚本中使用UTF8编码。关于如何保留encoading的任何指针?

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

1 个答案:

答案 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

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