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

如何更新Powershell中包含大于126的ascii字符的XML文件?,xml,powershell,Xml,Powershell,我正在读取一个xml文件,更新一个值并将其写回——这非常容易,因为我正在更新的文件包含一个右卷曲的单引号”字符。我第一次保存文件时,它会被替换为文件™。我运行它的次数越多,它就变得越糟糕,文件大小开始呈指数级增长 我已经计算出ascii值超过126的任何字符都会发生这种情况,并且我可以通过将'字符替换为’但是,一定有更好的方法 关于如何正确保存XML文件的任何建议—我唯一的想法是在整个XML文件中搜索ascii值大于126的任何字符并替换它 我目前的代码是: $Path = "C:\p

我正在读取一个xml文件,更新一个值并将其写回——这非常容易,因为我正在更新的文件包含一个右卷曲的单引号
字符。我第一次保存文件时,它会被替换为
文件™。我运行它的次数越多,它就变得越糟糕,文件大小开始呈指数级增长

我已经计算出ascii值超过126的任何字符都会发生这种情况,并且我可以通过将
'
字符替换为
但是,一定有更好的方法

关于如何正确保存XML文件的任何建议—我唯一的想法是在整个XML文件中搜索ascii值大于126的任何字符并替换它

我目前的代码是:

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

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

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

Get Content
Cmdlet指定编码

Get-Content $Path -Encoding ENCODING_HERE

Get Content
Cmdlet指定编码

Get-Content $Path -Encoding ENCODING_HERE

除非您的文件编码方式允许
Get Content
自动检测编码(如使用适当的UTF-8或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')

除非您的文件编码方式允许
Get Content
自动检测编码(如使用适当的UTF-8或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')

您可以将编码传递给
Get Content
。如果传递
file.xml
Ahh的编码,会发生什么,太简单了!非常好,谢谢。请注意,从技术上讲,只有一个ASCII字符>126。高于127的所有内容都是非ASCII的。您可以将编码传递给
获取内容
。如果传递
file.xml
Ahh的编码,会发生什么,太简单了!非常好,谢谢。请注意,从技术上讲,只有一个ASCII字符>126。127以上的所有内容都是非ASCII。很抱歉,我在开始编写答案时没有看到您的评论,在PowerShell中尝试了我的代码,然后发布了它。啊,很公平:)很抱歉,我在开始编写答案时没有看到您的评论,在PowerShell中尝试了我的代码,然后发布了它。啊,很公平:)