什么是XML从UTF-16转换为UTF-8编码的文件最简单的方法?

有帮助吗?

解决方案

这可能不是最优化的,但它的工作原理。只需加载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;
}

其他提示

唉,我想最简单的方法是只不关心文件是否是XML与否,只是转换:

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

此将只对XML工作的时候没有

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

线。

尝试这种解决方案使用一个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)      
}

您可能想看看XMLDocumentCreateXmlDeclaration更多的解释。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top