【发布时间】:2010-10-19 12:34:58
【问题描述】:
将 XML 从 UTF16 转换为 UTF8 编码文件的最简单方法是什么?
【问题讨论】:
标签: xml powershell utf-8 utf-16
将 XML 从 UTF16 转换为 UTF8 编码文件的最简单方法是什么?
【问题讨论】:
标签: xml powershell utf-8 utf-16
这可能不是最理想的,但它确实有效。只需加载 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"?>
行。
【讨论】:
gci -rec -fi * | %{(gc $_ -enc unicode) | set-content -enc utf8 $_.fullname}。实际上相当简单。
gci -rec -fi * | %{(gc $_.fullname -enc unicode) | set-content -enc utf8 $_.fullname}
FullName。 Get-Content 知道如何处理 FileInfo。
试试这个使用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 的更多说明。
【讨论】: