Export-Clixml экранирует все специальные символы в переменной

У меня есть 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

Когда он экспортируется, они переводятся в другие символы. В notepad++ "" и "-" отображаются как "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 являются также ?,

Я на версии 4 PowerShell.

РЕДАКТИРОВАТЬ: изменил некоторые детали. Извините за беспокойство. Я нахожусь на 2 разных системах и не могу копировать и вставлять.

3 ответа

Решение

Попробовав все, с помощью оригинального ответа ConnorLSW, я решил сосредоточиться на проблеме кодирования, и, наконец, я нашел то, что сработало!

После того, как файл XML был экспортирован с Export-ClixmlМне пришлось вручную 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

Укажите кодировку в Export-Clixml cmdlt.

с помощью Export-Clixml -Path $path -Encoding ASCII должны решить проблемы с неправильно сохраненными символами, Unicode и UTF8 также доступны как EncodingTypes.

Основываясь на ваших изменениях, я думаю, что некоторые символы преобразуются в объекты XML. Например — займет место персонажа с кодом 0x97,

Вам не нужно беспокоиться об этом; весь смысл сериализации объекта в XML состоит в том, чтобы десериализовать его обратно в объект.

Используя Import-Clixml в сгенерированном файле вы должны увидеть один и тот же объект (он просто больше не будет находиться в "живом" состоянии; это имеет значение для некоторых типов объектов, поскольку их части просто больше не будут работать).

Другие вопросы по тегам