Какой самый простой способ конвертировать XML из UTF16 в кодированный файл UTF8?
Преобразование xml из UTF-16 в UTF-8 с помощью PowerShell
Ответ 1
Это может быть не самое оптимальное, но оно работает. Просто загрузите 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;
}
Ответ 2
Ну, я думаю, самый простой способ - просто не заботиться о том, является ли файл XML или нет и просто конвертировать:
Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo
Это будет работать только для XML, если нет
<?xml version="1.0" encoding="UTF-16"?>
строка.
Ответ 3
Попробуйте это решение, которое использует 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
.