【问题标题】:C# - Linq.to.XML special symbols crashing applicationC# - Linq.to.XML 特殊符号使应用程序崩溃
【发布时间】:2011-09-03 20:18:29
【问题描述】:

我正在使用包含名称的 XML 数据库。不幸的是,我住在捷克共和国,捷克名字中有很多捷克字母。这些字母是ě š č ř ž ý á í é ú ů。每当数据库包含这些字母之一时,应用程序在解析数据期间崩溃。

调试器显示错误:“给定编码中的字符无效。第 4 行。位置 15”。

我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<Players>
 <Player>
  <Name>Karel Čubera</Name>
 </Player>
 <Player>
  <Name>Jiri Vontubas</Name>
 </Player>
 <Player>
  <Name>Jan Vernovsky</Name>
 </Player>
</Players>

我的应用:

    static void Main(string[] args)
    {
        XDocument xmlDoc = XDocument.Load("C://Database.xml");
        var XMLdata = from singlePlayer in xmlDoc.Descendants("Player")
                      select new
                      {
                          Name = singlePlayer.Element("Name").Value,
                      };

        foreach (var singlePlayer in XMLdata)
        {
            Console.WriteLine("Player name: " + singlePlayer.Name);
            Console.WriteLine();
        }            
        Console.Read();
    }

Linq to XML 甚至可以读取这些符号吗?我在 Windows 窗体应用程序中遇到了同样的问题。如果没有它们,我真的需要这些字母,这很糟糕。 :) 在此先感谢

【问题讨论】:

  • 保存在磁盘上的 XML 文件是否实际上以 UTF-8 编码?我的第一个猜测是它实际上是以其他一些编码保存的,并且 UTF-8 解析器在它为非 ASCII 字符找到的字节序列处出错。 (UTF-8 和 ASCII 的字节序列重叠且仅适用于 U+0000 到 U+007F。)
  • 当然不是 xD 我觉得很愚蠢,现在它是 ANSI,它现在可以工作了,非常感谢

标签: c# crash linq-to-xml


【解决方案1】:

您的 XML 文档编码错误。尝试在记事本中打开它,执行文件->另存为并选择 UTF-8。然后重新打开它并检查一切是否正确。

作为旁注,请注意控制台中使用的字体并不总是能够显示所有 Unicode 字符。如果放置断点,您将能够检查文件是否已正确加载。例如,它向我显示 Karel ČuberaKarel Cubera

【讨论】:

    【解决方案2】:

    文件的实际编码 (ANSI) 与 XML 文件 (UTF-8) 中的编码不同。始终检查真实编码!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2010-11-30
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多