【问题标题】:Importing XML with 'µ' symbol into excel将带有“µ”符号的 XML 导入 Excel
【发布时间】:2016-11-23 13:40:15
【问题描述】:

我正在尝试使用数据 -> 其他来源 -> 从 XML 数据导入将 XML 文件导入 excel。当文件包含“µ”符号时,会出现以下错误:

文件引用无效。文件的路径无效,或者一个或一个 找不到更多引用的架构。

XML 如下所示:

<root>
  <File>
    <FileName>Data\7.5 µg_mL Sample.pdf</FileName>
  </File>
</root>

如果我删除微克符号,它会起作用并且 Excel 会导入数据。

我正在使用XNode.toString() 在 .net 中生成 XML 文件,如果我通过验证器运行 XML,它不会返回任何错误。我是否将 XML 声明放在文件顶部并将其声明为 UTF-8 或 16 似乎都没有关系。

欢迎任何指针,理想情况下,我想检查可能导致此问题的任何字符,因为我猜不仅仅是微克符号。

我将 XML 字符串传递给一个交换自定义 xml 文件的函数,我似乎没有在此处更改文件格式的选项..

'Uses Ionic.Zip.ZipFile
Using zip As ZipFile = ZipFile.Read(fileDest)
    zip.RemoveEntry(xmlPath)
    zip.Save()
    zip.AddEntry(xmlPath, customXml)
    zip.Save()
End Using

【问题讨论】:

  • 你能展示创建这个文件的代码吗?我做了一个快速测试,如果你将该文件保存为 ANSI 编码,那么你会得到错误。如果您保存为 UTF-8,它似乎工作正常。我假设第一个被猜测为没有 BOM 的 UTF-8 并且在无效字符上失败。
  • 为什么不使用XDocument.SaveXmlWriter,在其设置中将编码设置为UTF8?这有点类似于@CharlesMager 指出的。
  • 我正在使用 Ionic.Zip.ZipFile 删除 zip 文件中的 xml 文件并用新文件替换它,我现在将在帖子底部弹出该代码
  • 如果您启动notepad.exe,然后选择“打开”,在“打开”对话框中导航到有问题的 XML 文件,而不实际离开“打开”对话框窗口,“编码”是什么建议在窗口底部?您也可以询问 Visual Studio(打开 XML 文件时的“文件 - 高级保存选项”)。
  • 还要注意有两个不同的Unicode码位,通常的希腊字母是U+03BC(μ),但是,由于历史原因,也有U+00B5(μ)的一部分拉丁语 1(以及相关的Encoding.GetEncoding("Windows-1252"))。

标签: c# xml vb.net excel


【解决方案1】:

每个the docsAddEntry 重载您正在使用:

条目的内容使用机器的默认文本编码进行编码

您希望这是 UTF-8,因此您可以使用 the overload that allows you to specify the encoding:

zip.AddEntry(xmlPath, customXml, Encoding.UTF8);

【讨论】:

  • 看准了,在你发帖前一分钟就到了! :) 不知道为什么我的智能感知没有显示过载
猜你喜欢
  • 2017-12-27
  • 2020-03-15
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 2014-10-02
  • 2012-12-23
相关资源
最近更新 更多