Существующее приложение передает XML в sproc в SQLServer 2000, тип данных входных данных - TEXT; XML получен из Dataset.GetXML(). Но я заметил, что он не указывает кодировку..NET DataSet.GetXml() - что такое кодировка по умолчанию?
Так что, когда пользователь пробирается неуместным символом в набор данных, а именно ASCII 146 (который представляется апострофом) вместо ASCII 39 (одинарная кавычка), sproc терпит неудачу.
Одним из подходов является префиксом результат GetXML с
<?xml version="1.0" encoding="ISO-8859-1"?>
Он работает в этом случае, но то, что было бы более правильным подходом для обеспечения sproc не сломается (если другие непредвиденные символы всплывал) ?
PS. Я подозреваю, что пользователь печатает текст в MS-Word или аналогичный редактор и копирует & в поля ввода приложения; Я, вероятно, хочу, чтобы пользователь продолжал работать таким образом, просто нужно предотвратить сбои.
EDIT: Я ищу ответы, которые подтверждают или отрицают некоторые аспекты, например:
- в соответствии с заголовком, какова кодировка по умолчанию, если ни один не указан в XML?
- Является ли кодирование ISO-8859-1 правильным для использования?
- если есть лучшая кодировка, которая будет охватывать больше символов в англоязычном мире и, следовательно, с меньшей вероятностью приведет к ошибке в sproc?
- Вы могли бы фильтровать на уровне пользовательского интерфейса приложения для стандартного ASCII (только от 0 до 127) и не разрешать расширенный ASCII?
- любые другие подходящие детали.
Неверное предположение, столбец не ТЕКСТ, для приема строки XML используется только параметр типа TEXT; ТЕКСТ используется, поскольку varchar (8000) имеет ограничение по длине; Проблема * есть * с парсером на sqlserver. Сервер: Msg 6603, уровень 16, состояние 1, процедура sp_xml_preparedocument, строка 40 Ошибка синтаксического анализа XML: в текстовом содержимом был найден недопустимый символ. Как я уже сказал, когда я объявляю XML-строку как ISO-8859-1, на sproc ошибки не возникает, поэтому анализатор обрабатывает ASCII 146 как приемлемый. – joedotnot
Проблема по-прежнему 'ТЕКСТ', на самом деле. В частности, когда вы передаете строку «Unicode» в ваш sproc, она должна быть преобразована в кодировку, отличную от Юникода, в соответствии с «TEXT»; результат, конечно, не кодируется с использованием UTF, и какую кодировку, которую он собирается использовать для преобразования, определить нелегко. Если у вас есть контроль над sproc, просто замените 'TEXT' на' NTEXT' и не беспокоитесь о ancodings –
. Я пришел к такому же выводу, чтобы использовать NTEXT непосредственно перед чтением вашего последнего комментария, тогда мне не нужно будет объявлять
? Xml version = "1.0" encoding = "ISO-8859-1"?
, чтобы заставить его работать (или вам не нужно беспокоиться об кодировании, как вы сказали). Не могли бы вы просто прояснить несколько вещей:
вы говорите, что если я использую NTEXT, строка xml, которую я передаю, будет интерпретироваться XML-парсером как UTF-16?
Почему выполняется сохранение TEXT и объявление строки xml как ISO-8859-1? – joedotnot