2010-03-08 2 views
3

Я пытаюсь проверить свой xml на его xsd и получить недопустимый символ в данной кодировке. Код я использую для проверки ниже:xml недопустимый символ в данной кодировке

private static void ValidatingProcess(string XSDPath, string xml) 
    { 
     MemoryStream stream = 
      new MemoryStream(ASCIIEncoding.Default.GetBytes(xml)); 

     using (StreamReader SR = new StreamReader(XSDPath)) 
     { 
      XmlSchema Schema = XmlSchema.Read(SR, ReaderSettings_ValidationEventHandler); 
      XmlReaderSettings ReaderSettings = new XmlReaderSettings(); 
      ReaderSettings.ValidationType = ValidationType.Schema; 
      ReaderSettings.Schemas.Add(Schema); 

      ReaderSettings.ValidationEventHandler += ReaderSettings_ValidationEventHandler; 
      XmlReader objXmlReader = XmlReader.Create(stream, ReaderSettings); 

      bool notDone = true; 
      while (notDone) 
      { 
       notDone = objXmlReader.Read(); 
      } 
     } 
    } 

Она ошибка на символах, такие как é, так что я угадал это было тот факт, UTF-8 был определен как кодирование или, как я создать MemoryStream в приведенной выше коде с ASCIIEncoding. Я попытался изменить кодировку как xsd, так и xml на UTF-16 и memystream на UTF32, но, похоже, это не имеет никакого эффекта. Есть идеи?

+0

Что кодирование файл в? – Oded

+0

Вы конвертируете свою строку ввода в ASCII и задаетесь вопросом о проблемах с кодировкой символов, отличных от ASCII? – dtb

+0

Какой файл? Если это xml, я передаю его в указанный выше метод как строку с конечным кодированием UTF-16, указанную в заголовке xml, и превращая его в поток памяти для использования. – PeteT

ответ

5

Не конвертируйте свою строку ввода в ASCII, если ваша строка ввода содержит символы, отличные от ASCII.

Вы можете использовать StringReader поставлять свою входную строку непосредственно в XmlReader:

using (var reader = XmlReader.Create(new StringReader(xml), settings)) { ...