La conversión de XML a partir de UTF-16 a PowerShell UTF-8 usando
-
09-09-2019 - |
Pregunta
¿Cuál es la forma más fácil de convertir XML a partir de UTF16 a un archivo UTF8 codificado?
Solución
Esto puede no ser el más óptimo, pero funciona. Sólo tiene que cargar el xml y empujarlo de vuelta a un archivo. el encabezado XML está perdido, aunque, por lo que este tiene que ser re-agregado.
$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;
}
Otros consejos
Bueno, supongo que la forma más fácil es simplemente no se preocupan por si el archivo es XML o no y simplemente convertir:
Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo
Esto sólo funcionará para XML cuando no hay
<?xml version="1.0" encoding="UTF-16"?>
línea.
Trate de esta solución que utiliza una 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
$xmlDoc.save($file.FullName)
}
Es posible que desee ver en XMLDocument
para una explicación más detallada sobre CreateXmlDeclaration
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow