Pregunta

¿Cuál es la forma más fácil de convertir XML a partir de UTF16 a un archivo UTF8 codificado?

¿Fue útil?

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
scroll top