在 Powershell 中将 UFT-8 xml 转换为 Unicode 时,$encoding 属性值在输出 xml 中显示 bigEndianUnicode,我想要 UTF-16
Posted
技术标签:
【中文标题】在 Powershell 中将 UFT-8 xml 转换为 Unicode 时,$encoding 属性值在输出 xml 中显示 bigEndianUnicode,我想要 UTF-16【英文标题】:On converting the UFT-8 xml to Unicode in Powershell, $encoding attribute value is showing bigEndianUnicode in the output xml, I want UTF-16 there 【发布时间】:2022-01-23 19:06:49 【问题描述】:将 UTF-8 转换为 Unicode 后在输出文件中获取这一行
<?xml version="1.0" encoding="bigEndianUnicode"?>
但我需要 xml 中的以下行
<?xml version="1.0" encoding="UTF-16"?>
【问题讨论】:
欢迎来到 Stack Overflow。请花2分钟tour。此外,打开Help center 并至少阅读How to Ask。然后,edit您的问题提供minimal reproducible example。 【参考方案1】:Giorgi Chakhidze's helpful answer 展示了一种适当的、基于 XML API 的方法来生成具有给定编码的 XML 文件,该编码也反映在输出文件的 XML 声明中。
但是,听起来您已经使用 plain-text 处理将文件从 UTF-8转码 为“Unicode” (UTF-16LE),现在必须调整这些文件的 XML 声明以匹配新编码。
以下显示了单个file.xml
文件的解决方案(它假设file.xml
具有“Unicode”(UTF-16LE)BOM,以便Get-Content
正确解释其编码):
(Get-Content -Raw -LiteralPath file.xml) -replace '(?<=^.+ encoding=")[^"]+', 'utf-16' |
Set-Content -NoNewLine -Encoding Unicode -LiteralPath file.xml
但是,尚不清楚您的转码自 UTF-8 文件是如何在其 XML 声明中以 encoding="bigEndianUnicode"
结尾的。
【讨论】:
【参考方案2】:假设您正在使用[xml]
类型,您可以设置 XML 文件的编码如下:
[xml] $xmlData = '<example>XML</example>'
$fileName = 'C:\test.xml'
$settings = New-Object System.Xml.XmlWriterSettings
# Set encoding to UTF-16
$settings.Encoding = [System.Text.Encoding]::Unicode
$xmlWriter = [System.Xml.XmlWriter]::Create($fileName, $settings)
$xmlData.Save($xmlWriter)
$xmlWriter.Close()
【讨论】:
以上是关于在 Powershell 中将 UFT-8 xml 转换为 Unicode 时,$encoding 属性值在输出 xml 中显示 bigEndianUnicode,我想要 UTF-16的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell:如何在 PowerShell 中将数组对象转换为字符串?
如何在 PowerShell 中将 curl 结果作为变量获取
powershell 在powershell中将Exchange 2007公用文件夹静态设置为excel和excel电子表格