Квест для 0x0B - PullRequest
       12

Квест для 0x0B

3 голосов
/ 16 ноября 2009

Я получаю эту ошибку при чтении некоторых данных из столбца SQL и последующем преобразовании их в XML:

"System.InvalidOperationException: в документе XML есть ошибка (182, 16). ---> System.Xml.XmlException: '', шестнадцатеричное значение 0x0B, это недопустимый символ."

Достаточно справедливо, возможно, данные искажены. Кроме как найти строку виновника?

SELECT * from Mytable where Column like '%' + char(0x0B)+'%' 

возвращается пустым.

(очевидно, я на всякий случай попробовал все комбинации% + char, char, char +%)

Ответы [ 3 ]

5 голосов
/ 16 ноября 2009

Наконец-то нашел!

Сериализатор .NET XML экранировал недопустимый символ при сериализации, но затем не экранировал его до десериализации .

Так что мне пришлось искать сбежавший & # xB, чтобы найти неотбегший 0x0B ... серьезно не смешные ребята!

Итак, это:

  SELECT * from Mytable where Column like '%' + '&#xB' + '%'

На самом деле найдет это:

<?xml version="1.0"?>
      <Hashtable><key>313_other_10</key><value>&#xB</value></Hashtable>

И хотя это выглядит как действительный XML, он выдаст недопустимое символьное исключение, когда:

    XmlSerializer xs = new XmlSerializer(Type.GetType(Hashtable));
    StringReader stringReader = new StringReader(xml);
    obj = xs.Deserialize(stringReader);

Большое спасибо людям, которые вскочили на помощь! Это была неоценимая помощь!

3 голосов
/ 16 ноября 2009

Вы уже пробовали nchar(0x0B) вместо char(0x0B)? Похоже, ваш хитрый персонаж - Юникод.

0 голосов
/ 16 ноября 2009

Символ 0x0B нельзя использовать в документе XML (см. Список допустимых символов XML здесь .). Пожалуйста, рассмотрите возможность переноса недопустимых символов XML, таких как этот, в допустимый XML (например, последовательность &#xB;). .

...