Необходимо "запихнуть" текст бинарного файла(exe-шника в моем случае) в XML, а потом обратно создать этот бинарник "вытащив" его из XML файла. Я использую tinyXML, кодировка UTF-8. Сам парсер парсит необходимое содержимое хорошо. Но при записи этого XML-файла в базу данных (SQL 2005), сервер начинает "матюкаться" на некоторые символы (в моем случае это символы 0xB9, 0xAD...), вытащенные из бинарного файла. Я так понимаю, что эти символы (как например \r (0xA) либо \n (0xD)) должен преобразовывать сам парсер... Кто-нибудь сталкивался с такой проблемой?
Здравствуйте, Аноним, Вы писали:
А>Необходимо "запихнуть" текст бинарного файла(exe-шника в моем случае) в XML, а потом обратно создать этот бинарник "вытащив" его из XML файла. Я использую tinyXML, кодировка UTF-8. Сам парсер парсит необходимое содержимое хорошо. Но при записи этого XML-файла в базу данных (SQL 2005), сервер начинает "матюкаться" на некоторые символы (в моем случае это символы 0xB9, 0xAD...), вытащенные из бинарного файла. Я так понимаю, что эти символы (как например \r (0xA) либо \n (0xD)) должен преобразовывать сам парсер... Кто-нибудь сталкивался с такой проблемой?
Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...)
Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.
Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...) SIG>Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.
Спасибо за ответ. Буду искать, как кодировать в base64. Я обошел проблему с нулевыми байтами заменяя их последовательностью символов при записи файла. Потом обратно парсю и вставляю те самые нулевые байты взамен упомянутых символов. Проблемка решилась с парсером. Но вот когда этот файл пытаюсь теперь отсылать в базу данных SQL 2005, она парсит его и "матерится" на русские символы (0xAD русская "н" например). Пробовал использовать раздел CDATA для записи туда бинарника, но ту же ошибку выдает парсер в SQL 2005.
Здравствуйте, romashka, Вы писали:
R>Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>>Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...) SIG>>Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.
R>Спасибо за ответ. Буду искать, как кодировать в base64. Я обошел проблему с нулевыми байтами заменяя их последовательностью символов при записи файла. Потом обратно парсю и вставляю те самые нулевые байты взамен упомянутых символов. Проблемка решилась с парсером. Но вот когда этот файл пытаюсь теперь отсылать в базу данных SQL 2005, она парсит его и "матерится" на русские символы (0xAD русская "н" например). Пробовал использовать раздел CDATA для записи туда бинарника, но ту же ошибку выдает парсер в SQL 2005.
Есть ещё YEnc. У него оверхед намного меньше.
Правда, смотрится в xml не так красиво как base64.