I have a DataGrid
($myWindow.myDataGrid.Items
) that I am trying to Export-Clixml
. The $myWindow.myDataGrid.Items
is an ItemCollection
that contains String
properties that are words with certain characters, like "C‘Thun" or "—Hello". To access the string I am currently looking at, I type $myWindow.myDataGrid.Items[0].Title
and that would give me the string "C‘Thun".
The command I used was:
$myWindow.myDataGrid.Items | Export-Clixml -path $path
When it's exported, they are translated into other characters. In notepad++, the "‘" and "—" show up as "x91" and "x97" respectively. I checked the array before exporting it and the text is accurate, but after exporting, I check the XML file and the text is all converted. I need to retain all the original characters.
I then used this command, to Import-Clixml
back into my DataGrid
:
$Global:items = [Object[]]Import-Clixml -path $path
$myWindow.myDataGrid.ItemsSource = $Global:items
I put a breakpoint at $Global:items = [Object[]]Import-Clixml -path $path
to see what the value at $Global:items[0].title
is when it gets imported and sure enough, it is a ?
. And the values in the DataGrid
are also ?
.
I'm on powershell version 4.
EDIT: Changed some details. Sorry for the trouble. I am on 2 different systems and cannot copy and paste.
After trying everything, with the help of ConnorLSW's original reply, I decided to focus more on the encoding side of the issue and I finally found something that worked!
After the XML file has been exported with Export-Clixml
, I had to manually Get-Content
and then Set-Content
to UTF8
like this:
Get-Content $path | Out-String | Set-Content $path -Encoding UTF8
The x91
and x97
gets converted back to its original characters and all is good.
Also, for some reason, the following code does not have the same effect and does not work for me:
$myWindow.myDataGrid.Items | Export-Clixml -path $path -Encoding UTF8