我试图在XML文件中用'GBP'替换'£'的出现。最初使用以下代码行读取该行:
$oldName = @(Select-Xml -Xml ([xml]$xml) -XPath "//fileName" | foreach {$_.Node.Innerxml} )
然后使用以下代码行进行替换:
$newName = $oldName -replace('£', 'GBP')
(get-content $file) | foreach-object {$_ -replace [Regex]::Escape($oldName), $newName} | set-content $file
(我最初尝试对XML元素执行更新,但遇到了麻烦,因此使用了基本版本。)
虽然这确实找到并用GBP取代了£符号,但它也留下了一个Â(alt + 0194),如下所示:
'total of ÂGBP200.docx'
在发生这种情况之后,如果我然后手动编辑文件并删除Â并再次使用£符号替换GBP(返回'总计£200.docx'),则下次处理时它将处理正确脚本运行,没有Â。
的迹象从中读取$ oldName的原始XML文件的编码是UTF-7,并且没有为'set-content $ file'指定编码方法。我已经尝试将其指定为UTF-7,它添加了许多奇怪的字符代替括号和UTF-8,它再次给出了Â。
我真的很感激指针,也许是否有更合理的方法来做到这一点。
谢谢,Rob。