Разбор XDocument с использованием формата UTF-8 и сохранение в MySQL как ошибка UTF-8 - PullRequest
1 голос
/ 21 октября 2011

Я анализирую документ XML в формате UTF-8 следующим образом:

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, является значением a.value в части xml linq.

Наша база данных MySQL по умолчанию настроена на использование UTF-8 и во всех базах данных, которые мы используем.

Кто-нибудь знает, как это исправить? Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

Хорошо, похоже, я решил эту проблему с помощью:

      Contents = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes(a.Value))
1 голос
/ 22 октября 2011

Вы правы, что «a.value» не использует UTF, потому что, как только XML находится в памяти, он представляется в виде обычных строк C # (без кодировки UTF8).Поэтому правильное поведение не поможет вам.

Вы должны очень внимательно посмотреть, что хранится и что на самом деле читается.Если это двоичное поле - попробуйте сначала получить байтовый массив и проверить, что там - UTF8 может начинаться с UTF BOM, а затем должен следовать текст.Проверьте, не является ли спецификация неправильной или символы представлены в виде 2 байтов вместо одного.

Если это текстовое поле - возможно, вы не сможете использовать UTF8 и должны использовать другую кодировку, которая соответствует окончанию ваших полей во время сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...