导出Clixml转义变量中的所有特殊字符

导出Clixml转义变量中的所有特殊字符,xml,powershell,export-to-xml,Xml,Powershell,Export To Xml,我有一个DataGrid($myWindow.myDataGrid.Items),我正试图导出Clixml。$myWindow.myDataGrid.Items是一个ItemCollection,它包含String属性,这些属性是带有特定字符的单词,如“C'Thun”或“-Hello”。要访问我当前正在查看的字符串,我键入$myWindow.myDataGrid.Items[0].Title,这将得到字符串“C'Thun” 我使用的命令是: $myWindow.myDataGrid.Items

我有一个
DataGrid
$myWindow.myDataGrid.Items
),我正试图
导出Clixml
$myWindow.myDataGrid.Items
是一个
ItemCollection
,它包含
String
属性,这些属性是带有特定字符的单词,如“C'Thun”或“-Hello”。要访问我当前正在查看的字符串,我键入
$myWindow.myDataGrid.Items[0].Title
,这将得到字符串“C'Thun”

我使用的命令是:

$myWindow.myDataGrid.Items |导出Clixml-path$path
导出时,它们将被转换为其他字符。在notepad++中,“'”和“-”分别显示为“x91”和“x97”。我在导出数组之前检查了它,文本是准确的,但是在导出之后,我检查了XML文件,文本被全部转换。我需要保留所有的原始字符

然后,我使用此命令将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
就是一个
。而
数据网格中的值也是

我使用的是powershell版本4


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

请在
Export-Clixml
cmdlt中指定编码


使用
Export-Clixml-Path$Path-Encoding ASCII
可以解决存储字符不正确的问题,Unicode和UTF8也可以作为
EncodingType
s提供。

Export-Clixml
cmdlt中指定编码


使用
Export-Clixml-Path$Path-Encoding ASCII
应该可以解决存储错误字符的问题,Unicode和UTF8也可以作为
EncodingType
s提供。

根据您的编辑,我想发生的是某些字符正在转换为XML实体。例如
将用code
0x97
替换字符

你不必为此担心;将对象序列化为XML的关键是将其反序列化为对象


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

基于您的编辑,我认为发生的情况是某些字符正在转换为XML实体。例如
将用code
0x97
替换字符

你不必为此担心;将对象序列化为XML的关键是将其反序列化为对象


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

在尝试所有操作后,在ConnorLSW的原始答复的帮助下,我决定把更多的精力放在问题的编码方面,最终我发现了一些有用的东西

使用
Export Clixml
导出XML文件后,我必须手动
获取内容
,然后
将内容
设置为
UTF8
,如下所示:

获取内容$path |输出字符串|设置内容$path-编码UTF8

x91
x97
被转换回其原始字符,一切正常。 此外,由于某些原因,以下代码不具有相同的效果,对我不起作用:


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

在尝试了一切之后,在ConnorLSW最初的回复的帮助下,我决定更多地关注问题的编码方面,最终找到了一些有效的方法

使用
Export Clixml
导出XML文件后,我必须手动
获取内容
,然后
将内容
设置为
UTF8
,如下所示:

获取内容$path |输出字符串|设置内容$path-编码UTF8

x91
x97
被转换回其原始字符,一切正常。 此外,由于某些原因,以下代码不具有相同的效果,对我不起作用:


$myWindow.myDataGrid.Items |导出Clixml-path$path-Encoding UTF8

--
都不是特殊字符,但即使使用反勾而不是撇号,我也无法重现这个问题。你能给我一个实际的样品吗?此外,我怀疑问题在于,当您查看XML时,您使用的编辑器不理解XML文件的编码,并且字符编码正确。真正的测试是当您使用
importclixml
时,它是否都能正常工作。请提供进一步的细节和步骤,以便重新开始。@Briantis对于误解,我深表歉意。我已经用更准确的信息更新了它。
--
不是特殊字符,但即使用反勾号代替撇号,我也无法重现这个问题。你能给我一个实际的样品吗?此外,我怀疑问题在于,当您查看XML时,您使用的编辑器不理解XML文件的编码,并且字符编码正确。真正的测试是当您使用
importclixml
时,它是否都能正常工作。请提供进一步的细节和步骤,以便重新开始。@Briantis对于误解,我深表歉意。我用更多的accura更新了它