【问题标题】:Encoding XML file breaks at special Latin characters编码 XML 文件在特殊拉丁字符处中断
【发布时间】:2016-10-26 07:55:01
【问题描述】:

我有一个 XML 文件,我将它附加到我的站点库中。 XML 有拉丁字符,所以我使用这种方法对其进行编码item.Attachments.Add("xyz.xml", Encoding.GetEncoding("iso-8859-1").GetBytes(writerXml.ToString()));

问题是当我尝试在浏览器中打开文件时,它会破坏出现特殊字符的位置。它给出了错误,因为无法使用 XSL 样式表查看 XML 输入。

我想知道如何解决这个问题以及为什么我无法在浏览器中生成它?

尝试使用以下代码添加声明:

XDocument doc = new XDocument();
            doc.Declaration = new XDeclaration("1.0","ISO-8859-1", null);
            XElement element = new XElement("webapp", new XAttribute("name", webApp.Name), new XAttribute("id", webApp.Id),
                           MyInformation;
            doc.Add(element);
            return doc.ToString();
        }

【问题讨论】:

  • 请发布一个可重现的示例(XML +XSLT)。并说明您使用的是哪种浏览器。
  • 使用 IE,我得到了文件中断的确切值(即特殊字符)。使用 Chrome,我收到行号和列号错误

标签: xml xslt


【解决方案1】:

显然文件的编码不是浏览器认为的那样。

我真的不明白为什么现在你要使用 iso-8859-1 而不是 utf-8,但如果这是你的选择,你需要确保 (a) 在开头的 XML 声明该文件将其声明为 iso-8859-1,并且 (b) 提供文件时 HTTP 标头中没有冲突的声明。我的猜测(几乎没有证据)是文件上没有 XML 声明,因此浏览器假定为 UTF-8。

【讨论】:

  • 所以你说的是,如果我在 XML 生成的开始添加行 ....它应该工作?我正在做 ISO-8859-1,因为它已经在代码中实现以处理拉丁字符
  • 好吧,我可以肯定地说,如果文件使用 iso-8859-1 编码并且在开始时没有 XML 声明,那么它将不起作用。先解决这个问题,看看是否还有其他问题。但是,以这种方式手动构建 XML 文件可能无论如何都不是一个好主意:还有很多其他事情可能会出错,比如转义。最好为此目的使用库。
  • 好的..感谢您的指导.. 我正在通过代码构建 XML,当没有特殊字符时,我可以在浏览器中打开它。所以我将在代码中修复相同的内容以获取起始标签。有结果后会更新。再次感谢!
  • 我正在尝试使用代码添加标签(在问题中编辑)。但是我得到的输出不包含声明。使用 C# 代码,知道我缺少什么吗?
  • 您好,我可以在文件中添加标头,但现在会引发不同的错误:从当前编码切换到不支持的指定编码。处理资源“xyz”时出错。 为什么我的 ISO 代码被转换为 utf-16?都一样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多