This could have saved me some time today!
I’m new to PowerShell and this was hard work to find that it’s not my problem.
$enc = [System.Text.Encoding]::GetEncoding(28591) # iso-8859-1 # Using StringBuilder to form a valid XML file with encoding declaration $builder = New-Object System.Text.StringBuilder $stringWriter = New-Object System.IO.StringWriter($builder) $settings = New-Object System.XML.XmlWriterSettings $settings.Encoding = $enc $settings.Indent = $true $settings.CloseOutput = $false $settings.CheckCharacters = $true Write-Host $settings.Encoding $writer = [System.XML.XmlWriter]::Create($builder, $settings) Write-Host $writer.Settings.Encoding $xmlDoc.AppendChild($xmlData) $xmlDoc.Save($writer) # Save the XML into the $writer object $writer.Close() $stringWriter.Dispose()
I created a settings object to set the encoding I wanted and then passed that into
XmlWriter::Create but it gets totally ignored and reverts back to default UnicodeEncoding.
So the settings value is
Latin1Encoding, but once it reaches the other side of the
XmlWriter::Create it has become
The result is every XML file I create has
encoding="utf-16" in the declaration.