【问题标题】:Parsing XDocument using UTF-8 format and saving to MySQL as UTF-8 error使用 UTF-8 格式解析 XDocument 并作为 UTF-8 错误保存到 MySQL
【发布时间】:2011-12-12 20:47:33
【问题描述】:

我正在解析一个 UTF-8 格式的 XML 文档,如下所示:

XDocument doc = GetXmlFeed(url);
            doc.Declaration = new XDeclaration("1.0", "utf-8", "true");
            var root = doc.Root;

            if (year == highestYear)
                data = new TourDetails()
                {
                    TourName = root.Element("tourName").Value,
                    DetailedItenerary = (from a in root.Element("detailedItinerary").Descendants("detailedItineraryItem")
                                         select new IteneraryItem()
                                         {
                                             Label = a.Attribute("label").Value,
                                             Contents = a.Value
                                         }).ToList()
                };

DetailedItinerary 的内容为 UTF-8 格式。但是,当我们将它保存在数据库中时,我们会得到一些奇怪的字符,例如 ’ 和其他字符。

如何将要使用的内容理解为 UTF-8 格式。我假设不使用 UTF-8 的部分是 xml linq 部分中的 a.value。

我们的 MySQL 数据库默认设置为使用 UTF-8,并且在我们使用的所有数据库中。

有人知道怎么解决吗?谢谢!

【问题讨论】:

    标签: c# xml utf-8 linq-to-xml


    【解决方案1】:

    好的,我似乎已经解决了这个问题:

          Contents = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes(a.Value))
    

    【讨论】:

      【解决方案2】:

      你说得对,“a.value”没有使用 UTF,因为一旦 XML 在内存中,它就会被表示为常规 C# 字符串(没有 UTF8 编码)。所以正确的做法对你没有帮助。

      您需要非常仔细地查看存储的内容和实际读取的内容。如果它是二进制字段 - 尝试首先获取字节数组并检查其中的内容 - UTF8 可能以 UTF BOM 开头,然后是文本。检查 BOM 是否错误,或者字符是否表示为 2 个字节而不是 1 个字节。

      如果是文本字段 - 您可能无法强制使用 UTF8,应使用与您的字段在保存时匹配的其他编码。

      【讨论】:

        猜你喜欢
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 2019-08-08
        • 2015-07-31
        相关资源
        最近更新 更多