Converting xml from UTF-16 to UTF-8 using PowerShell


What's the easiest way to convert XML from UTF16 to a UTF8 encoded file?


Try this solution that uses a XmlWriter:

$encoding="UTF-8" # most encoding should work
$files = get-ChildItem "*.xml"
foreach ( $file in $files )
    [xml] $xmlDoc = get-content $file
    $xmlDoc.xml = $($xmlDoc.CreateXmlDeclaration("1.0",$encoding,"")).Value

You may want to look at XMLDocument for more explanation on CreateXmlDeclaration.

By : LMA1980

This may not be the most optimal, but it works. Simply load the xml and push it back out to a file. the xml heading is lost though, so this has to be re-added.

$files = get-ChildItem "*.xml"
foreach ( $file in $files )
    [System.Xml.XmlDocument]$doc = new-object System.Xml.XmlDocument;
    $doc.set_PreserveWhiteSpace( $true );
    $doc.Load( $file );

    $root = $doc.get_DocumentElement();
    $xml = $root.get_outerXml();
    $xml = '<?xml version="1.0" encoding="utf-8"?>' + $xml

    $newFile = $file.Name + ".new"
    Set-Content -Encoding UTF8 $newFile $xml;
By : Ben Laan

Well, I guess the easiest way is to just not care about whether the file is XML or not and simply convert:

Get-Content -Encoding Unicode | Set-Content -Encoding UTF8

This will only work for XML when there is no

<?xml version="1.0" encoding="UTF-16"?>


By : Joey

This video can help you solving your question :)
By: admin