C# 使用UTF-8格式解析XDocument并将其作为UTF-8错误保存到MySQL
我正在解析一个UTF-8格式的XML文档,如下所示: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()
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))