Question

Quelle est la meilleure façon de convertir XML à partir UTF16 dans un fichier UTF8?

Était-ce utile?

La solution

Ce ne peut pas être la plus optimale, mais il fonctionne. Il suffit de charger le fichier XML et le repousser vers un fichier. la rubrique xml est perdu, donc cela doit être à nouveau ajouté.

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

Autres conseils

Eh bien, je suppose que le plus simple est de tout simplement pas se soucier de savoir si le fichier est XML ou non et convertir simplement:

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

Cela ne fonctionnera que pour XML quand il n'y a pas

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

ligne.

Essayez cette solution qui utilise un 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)      
}

Vous pouvez regarder XMLDocument pour plus d'explications sur CreateXmlDeclaration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top