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$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
这是为什么你不应该使用这个习语的一个很好的例子- 就这么方便。[1]问题确实是字符编码之一:您的文件是 UTF-8 编码的,但 Windows PowerShell 的[xml]$xmldata = (Get-Content $xmlpath)
Get-Content
cmdlet 在没有 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"?>
)
也可以看看:
本答案的底部部分提供背景信息。
GitHub 提案 #14505,建议引入一个New-Xml
能够稳健解析 XML 文件的 cmdlet。
[1] 如果您碰巧提前知道输入文件的编码,则可以在原始方法 ( )中使用'Get-Content
s参数,但基于 - 的方法更加稳健。
-Encoding
[xml]$xmldata = (Get-Content -Encoding utf8 $xmlpath
.Load()
归档时间: |
|
查看次数: |
825 次 |
最近记录: |