C# 使用UTF-8格式解析XDocument并将其作为UTF-8错误保存到MySQL

C# 使用UTF-8格式解析XDocument并将其作为UTF-8错误保存到MySQL,c#,xml,utf-8,linq-to-xml,C#,Xml,Utf 8,Linq To Xml,我正在解析一个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()

我正在解析一个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()
                };
详细编辑资料的内容为UTF-8格式。但是,当我们将其保存在数据库中时,我们会得到一些奇怪的字符,如€™ 等等

如何使要使用的内容理解为UTF-8格式。我假设没有使用UTF-8的部分是XMLLINQ部分中的a.value

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

有人知道怎么修吗?谢谢

您是对的,“a.value”没有使用UTF,因为只要XML在内存中,它就表示为常规C#字符串(没有UTF8编码)。所以,正确的选择对你没有帮助

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

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

您是对的,“a.value”没有使用UTF,因为只要XML在内存中,它就表示为常规C字符串(无UTF8编码)。所以,正确的选择对你没有帮助

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


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

好的,我似乎已通过使用以下代码解决了此问题:

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

好的,我似乎已经通过以下方式解决了此问题:

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