1

我有一个DataGrid( $myWindow.myDataGrid.Items),我正在尝试Export-Clixml。The$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

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

我在powershell版本4上。

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

4

3 回答 3

0

Export-Clixmlcmdlt 中指定编码。

usingExport-Clixml -Path $path -Encoding ASCII应该可以解决错误存储字符的问题,Unicode 和 UTF8 也可用作EncodingTypes。

于 2017-05-25T22:10:25.810 回答
0

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

您无需担心这一点;将对象序列化为 XML 的全部意义在于将其反序列化回对象。

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

于 2017-05-26T14:04:27.890 回答
0

在尝试了一切之后,在 ConnorLSW 的原始回复的帮助下,我决定更多地关注问题的编码方面,我终于找到了可行的方法!

使用 导出 XML 文件后Export-Clixml,我必须手动Get-Content然后Set-ContentUTF8这样:

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

和被转换回原来的字符,一切都很好x91x97另外,由于某种原因,以下代码没有相同的效果,对我不起作用:

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

于 2017-05-26T15:51:59.120 回答