我有一个DataGrid
($myWindow.myDataGrid.Items
),我正在尝试Export-Clixml
。 $myWindow.myDataGrid.Items
是ItemCollection
,其中包含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版上。
编辑:更改了一些细节。抱歉,添麻烦了。我在两个不同的系统上,无法复制和粘贴。
答案 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
x91
和x97
会转换回原来的字符,一切都很好。
此外,由于某些原因,以下代码不具有相同的效果,对我不起作用:
$myWindow.myDataGrid.Items | Export-Clixml -path $path -Encoding UTF8