我正在使用EPPlus(4.5.2.1),并且对XLSX及其底层XML部分的编码有疑问。
我必须在要解压缩XLSX文件然后使用LoadXML方法读取“ xl / workbook.xml”文件的项目中使用C#代码。
XmlDocument workbook = new XmlDocument();
workbook.LoadXml(UnzipAndGetFile("xl/workbook.xml"));
此代码与使用Microsoft Excel创建的XLSX文件配合使用正常。
但是,当我读取使用EPPlus库创建的文件时,出现以下异常:
System.Xml.XmlEception:根级别的数据无效。第1行,位置1。
经过一番调查,我发现EPPlus库创建的XML文件正在使用带有BOM编码的UTF-8。相反,从Excel创建的文件使用UTF-8 没有 BOM进行编码。
简而言之,BOM导致异常。
如果可以在XML文件中找到BOM,则可以检查并删除它,但是我有以下问题。
问题:
使用EPPlus保存XLSX文件时是否可以指定UTF-8编码? (即:不带BOM的UTF-8或不带BOM的UTF-8)
为什么EPPlus使用UTF-8 + BOM,而Excel使用UTF-8不使用BOM?
是否在OOXML(Office Open XML)标准中指定使用UTF-8 + BOM?