Export-Clixml转义变量中的所有特殊字符

时间:2017-05-25 21:31:00

标签: xml powershell export-to-xml

我有一个DataGrid$myWindow.myDataGrid.Items),我正在尝试Export-Clixml$myWindow.myDataGrid.ItemsItemCollection,其中包含String属性,这些属性是具有特定字符的字词,例如" C'Thun"或" -Hello"。要访问我目前正在查看的字符串,我输入$myWindow.myDataGrid.Items[0].Title,这会给我字符串" C'Thun"。

我使用的命令是:

$myWindow.myDataGrid.Items | Export-Clixml -path $path

导出后,它们会被翻译成其他字符。在记事本++中,"'"和" - "显示为" x91"和" x97"分别。我在导出它之前检查了数组并且文本是准确的,但是在导出之后,我检查XML文件并且文本全部被转换。我需要保留所有原始字符。

然后我使用此命令将Import-Clixml返回到DataGrid

$Global:items = [Object[]]Import-Clixml -path $path
$myWindow.myDataGrid.ItemsSource = $Global:items

我在$Global:items = [Object[]]Import-Clixml -path $path处设置了一个断点,以查看导入时$Global:items[0].title的值是多少,当然,它是?DataGrid中的值也是?

我在powershell第4版上。

编辑:更改了一些细节。抱歉,添麻烦了。我在两个不同的系统上,无法复制和粘贴。

3 个答案:

答案 0 :(得分:0)

Export-Clixml cmdlt。

中指定编码

使用Export-Clixml -Path $path -Encoding ASCII可解决存储错误字符的问题,Unicode和UTF8也可用EncodingType s。

答案 1 :(得分:0)

根据您的编辑,我认为正在发生的事情是某些字符正在转换为XML实体。例如,—将取代代码为0x97的字符。

你不必担心这个;将对象序列化为XML的重点是将其反序列化为对象。

通过在生成的文件上使用Import-Clixml,您应该看到相同的对象(它不再处于“实时”状态;这对于某些类型的对象来说很重要,因为它们的一部分只是将不再工作了。)

答案 2 :(得分:0)

在尝试了一切之后,在ConnorLSW的原始回复的帮助下,我决定更多地关注问题的编码方面,我终于发现了一些有用的东西!

使用Export-Clixml导出XML文件后,我必须手动Get-Content然后Set-Content改为UTF8,如下所示:

Get-Content $path | Out-String | Set-Content $path -Encoding UTF8

x91x97会转换回原来的字符,一切都很好。 此外,由于某些原因,以下代码不具有相同的效果,对我不起作用:

$myWindow.myDataGrid.Items | Export-Clixml -path $path -Encoding UTF8