Frage

Was ist der einfachste Weg, XML von UTF16 zu einer UTF8 codierten Datei zu konvertieren?

War es hilfreich?

Lösung

Dies ist vielleicht nicht die optimalste, aber es funktioniert. Laden Sie einfach die XML und drücken Sie sie in eine Datei zurück. die xml Überschrift ist zwar verloren, so hat dies erneut hinzugefügt werden.

$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;
}

Andere Tipps

Nun, ich denke, der einfachste Weg ist, nur um es egal, ob die Datei XML ist oder nicht, und einfach konvertieren:

Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo

Dies wird nur für XML arbeiten, wenn kein

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

Zeile.

Versuchen Sie, diese Lösung, die eine XmlWriter verwendet:

$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
    $xmlDoc.save($file.FullName)      
}

Sie möchten bei XMLDocument für weitere Erklärung auf CreateXmlDeclaration suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top