如何更新包含大于126的ascii字符的Powershell中的XML文件?

时间:2017-12-29 11:24:14

标签: xml powershell

我正在读取一个xml文件,更新一个值并将其写回来 - 对于我正在更新的文件包含一个正确的单引号字符这一事实,这一切都相当容易。我第一次保存文件时会被’替换。我运行它的次数越多,它就越糟糕,文件大小开始呈指数级增长。

我已经解决了这个问题发生在ascii值超过126的任何字符上,我可以通过用替换’字符来防止这种情况,但是,必须有更好的方法!

有关如何正确保存XML文件的任何建议 - 我唯一的想法是在整个xml文件中搜索具有ascii值>的任何字符; 126并替换它。

我目前的代码是:

$Path = "C:\path\to\file.xml"
[xml]$xml = Get-Content $Path 
$xml.Save($Path)

3 个答案:

答案 0 :(得分:2)

除非您的文件以允许Get-Content自动检测编码的方式进行编码(如UTF-8或带有正确byte order mark的UTF-16),否则您需要告诉cmdlet使用哪种编码使用:

[xml]$xml = Get-Content 'C:\path\to\your.xml' -Encoding UTF8

或创建一个Xml对象并使用其Load()方法,该方法将使用XML前导码中指定的编码,如果遇到与该编码不匹配的字符,则会抛出错误:

$xml = New-Object Xml
$xml.Load('C:\path\to\your.xml')

答案 1 :(得分:0)

尝试像这样的事情

$Path = "C:\path\to\file.xml"
[xml]$xml = Get-Content $Path -Encoding UTF8

答案 2 :(得分:0)

指定Get-Content Cmdlet的编码。

Get-Content $Path -Encoding ENCODING_HERE