{"'\ u0004', шестнадцатеричное значение 0x04, является недопустимым символом - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь преобразовать файл в формат XML, содержащий некоторые специальные символы, но он не конвертируется из-за этих специальных символов в данных. У меня уже есть этот код регулярного выражения, но он не работает для меня, пожалуйста, помогите.

Код, который я пробовал:

string filedata = @"D:\readwrite\test11.txt";
string input = ReadForFile(filedata);
string re1 = @"[^\u0000-\u007F]+";
string re5 = @"\p{Cs}";
data = Regex.Replace(input, re1, "");   
data = Regex.Replace(input, re5, "");

XmlDocument xmlDocument = new XmlDocument();
try
{
   xmlDocument = (XmlDocument)JsonConvert.DeserializeXmlNode(data);
   var Xdoc = XDocument.Parse(xmlDocument.OuterXml);
}
catch (Exception ex)
{
   Console.WriteLine(ex);
}

1 Ответ

0 голосов
/ 01 сентября 2018

0x04 является символом управления передачей и не может появляться в текстовой строке. XmlDocument вправе отклонить его, если он действительно появляется в ваших данных. Это говорит о том, что имеющееся у вас регулярное выражение не делает то, что вы думаете, если я прав, что регулярное выражение найдет первый экземпляр одного или нескольких из этих недопустимых символов в начале строки и заменит его, но не все они. Реальный вопрос для меня заключается в том, почему этот нетекстовый «символ» появляется в данных, изначально предназначенных для XML.

У меня есть другие вопросы. Я никогда не видел JsonConvert.DeserializeXmlNode раньше - мне пришлось посмотреть, что он делает. Почему вы используете функцию JSON для корня документа, который, вероятно, поэтому не содержит JSON? Почему вы берете этот документ, конвертируете его обратно в строку, а затем создаете из него XDocument? Почему бы просто не создать XDocument для начала?

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