从 Excel 导出后,在 XML 文件和 PowerShell 输出中发现奇怪的字符:

Cri*_*imp 3 xml excel powershell

我有一个 XML 文件,我正在尝试使用 PowerShell 读取该文件。但是,当我阅读它时,某些 XML 对象的输出中包含以下字符: \xc3\xa2\xe2\x82\xac\xe2\x80\xb9

\n

我只是从第三方下载了所需的 XML 文件,该文件在 Excel 中打开。然后我抓取所需的列并将它们粘贴到新的 Excel 工作簿中。然后,我使用 XML 架构映射字段,然后将其导出为 XML 文件,然后将其用于编写脚本。

\n

在 Excel 电子表格中,我的数据看起来很干净,但当我导出它并运行 PS 脚本时,这些奇怪的字符出现在输出中。这些字符甚至在导出后出现在实际的 XML 文件中。我究竟做错了什么?

\n

我尝试使用-Encoding UTF8,但我对 PowerShell 比较陌生,并且不确定如何将其正确应用到我的脚本中。感谢任何帮助!

\n

电源外壳

\n
$xmlpath = 'Path\\To\\The\\File.xml'\n\n[xml]$xmldata = (Get-Content $xmlpath)\n\n$xmldata.applications.application.name\n
Run Code Online (Sandbox Code Playgroud)\n

输出示例

\n
\xc3\xa2\xe2\x82\xac\xe2\x80\xb9ABC_DEF_GHI\xc3\xa2\xe2\x82\xac\xe2\x80\xb9.com\xc3\xa2\xe2\x82\xac\xe2\x80\xb9\xc3\xa2\xe2\x82\xac\xe2\x80\xb9\n\xc3\xa2\xe2\x82\xac\xe2\x80\xb9JKL_MNO_PQRS\xc3\xa2\xe2\x82\xac\xe2\x80\xb9.com\xc3\xa2\xe2\x82\xac\xe2\x80\xb9\nTUV_WXY_Z.com\nAB_CD_EF_GH\xc3\xa2\xe2\x82\xac\xe2\x80\xb9.com\n
Run Code Online (Sandbox Code Playgroud)\n

mkl*_*nt0 5

这是为什么你不应该使用这个习语的一个很好的例子
[xml]$xmldata = (Get-Content $xmlpath)- 就这么方便。[1]问题确实是字符编码之一:您的文件是 UTF-8 编码的,但 Windows PowerShell 的Get-Contentcmdlet 在没有 BOM 的情况下将其解释为 ANSI 编码 -这个答案详细解释了编码部分。谢谢,乔罗巴

相反,要确保正确解释 XML 文件的字符编码,请使用以下命令:

# Note: If you know that $xmlPath contains a *full*, native path,
#       you don't need the Convert-Path call.
($xmlData = [xml]::new()).Load((Convert-Path -LiteralPath $xmlPath))
Run Code Online (Sandbox Code Playgroud)

这将字符编码的解释委托给System.Xml.XmlDocument.Load.NET API 方法,该方法不仅假定 XML (UTF-8) 的正确默认值,而且还尊重任何显式编码规范作为 XML 声明的一部分(如果存在
<?xml version="1.0" encoding="iso-8859-1"?>

也可以看看:


[1] 如果您碰巧提前知道输入文件的编码,则可以在原始方法 ( )中使用'Get-Content s参数,但基于 - 的方法更加稳健。 -Encoding[xml]$xmldata = (Get-Content -Encoding utf8 $xmlpath.Load()