Преобразование XML из UTF-16 в UTF-8 с помощью PowerShell - PullRequest
18 голосов
/ 15 апреля 2009

Какой самый простой способ конвертировать XML из UTF16 в файл в кодировке UTF8?

Ответы [ 3 ]

14 голосов
/ 27 января 2011

Ну, я думаю, что самый простой способ - просто не заботиться о том, является ли файл XML или нет, и просто конвертировать:

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

Это будет работать только для XML, когда нет

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

линия.

14 голосов
/ 15 апреля 2009

Это может быть не самым оптимальным, но это работает. Просто загрузите xml и отправьте его обратно в файл. заголовок xml потерян, поэтому его нужно добавить заново.

$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;
}
9 голосов
/ 07 июня 2012

Попробуйте это решение, которое использует 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)      
}

Вы можете посмотреть на XMLDocument для более подробного объяснения на CreateXmlDeclaration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...