Was ist der einfachste Weg, XML von UTF16 in eine UTF8-codierte Datei zu konvertieren?Konvertieren von XML von UTF-16 in UTF-8 mit PowerShell
Antwort
Dies ist vielleicht nicht optimal, aber es funktioniert. Laden Sie einfach das XML und drücken Sie es wieder in eine Datei. Die XML-Überschrift ist jedoch verloren, also muss diese neu 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;
}
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 es keine
<?xml version="1.0" encoding="UTF-16"?>
Linie.
Wenn Sie dies tun möchten, ohne eine neue Datei zu erstellen, können Sie den Get-Inhalt in Klammern umwandeln: (Get-Content File.foo) | Set-Content -Encoding UTF8 File.foo – Jaykul
Wie machen Sie das für Dateien in einem Verzeichnis und in Unterverzeichnissen? – stormwild
'gci -rec -fi * | % {(gc $ _ -enc Unicode) | set-content -enc utf8 $ _. fullname} '. Ziemlich einfach, eigentlich. – Joey
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 können bei XMLDocument
für weitere Erklärung auf CreateXmlDeclaration
suchen.
Vielen Dank, dass Sie sich darum gekümmert haben, solch eine kurze, technisch bessere Antwort auf solch eine alte Frage zu geben! – gimpf
Ich musste es schaffen und ich fand diese Lösung noch bevor ich diese Frage sah. Ich hielt es für normal, es anzubieten. Mit wenig Aufwand kann es sogar jemand zum Kopieren verwenden, während die Kodierung der Dateien konvertiert wird. Grüße. – LMA1980
Sollten Sie die Codierung nicht explizit festlegen, um irgendwo zu speichern? – Joey
Wenn ich wüsste wie, würde ich. Es scheint jedoch der Standard zu sein. –
-Encoding-Parameter. – JasonMArcher