Convertendo xml de UTF-16 para UTF-8 usando o PowerShell
-
09-09-2019 - |
Pergunta
O que é a maneira mais fácil de XML convertido do UTF16 em um arquivo codificado UTF8?
Solução
Esta pode não ser a mais ideal, mas funciona. Basta carregar o xml e empurrá-lo de volta para um arquivo. o título xml está perdido, porém, e isso tem que ser re-adicionado.
$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;
}
Outras dicas
Bem, eu acho que a maneira mais fácil é simplesmente não se preocupam se o arquivo é XML ou não e simplesmente converter:
Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo
Isto irá funcionar apenas para XML quando não existe
<?xml version="1.0" encoding="UTF-16"?>
linha.
Tente esta solução que utiliza um 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)
}
Você pode querer olhar para XMLDocument
para mais explicações sobre CreateXmlDeclaration
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow