.NET DATASET.GETXML ​​() - Что такое кодирование по умолчанию?

StackOverflow https://stackoverflow.com/questions/1876022

Вопрос

Существующее приложение передает XML в SPROC в SQLServer 2000, тип данных входного параметра является текстом; XML получен из DateSet.getXml (). Но я замечаю, что это не указывает кодирование.

Поэтому, когда пользователь пробирается в неподходящем символе в набор данных, в частности ASCII 146 (который, по -видимому, является апострофом) вместо ASCII 39 (одиночная цитата), Sproc не работает.

Одним из подходов является префикс результат getXML с

<?xml version="1.0" encoding="ISO-8859-1"?>

Это работает в этом случае, но что было бы более правильным подходом для обеспечения того, чтобы Sproc не сбой (если появляются другие непредвиденные персонажи)?

Пса Я подозреваю, что пользователь вводит текст в MS-Word или аналогичный редактор и копирует и встает в поля ввода приложения; Я бы, вероятно, хотел бы позволить пользователю продолжать работать таким образом, просто необходимо предотвратить сбои.

РЕДАКТИРОВАТЬ: Я ищу ответы, которые подтверждают или опровергают несколько аспектов, например:
- Согласно заголовку, что кодирование по умолчанию, если никто не указан в XML?
-Кодирование ISO-8859-1 правильным для использования?
- Если есть лучшее кодирование, которое охватывает больше персонажей в англоязычном мире и, следовательно, с меньшей вероятностью вызовет ошибку в Sproc?
- Вы бы отфильтровали на уровне пользовательского интерфейса приложения для стандартного ASCII (только от 0 до 127) и не разрешаете расширенный ASCII?
- любые другие соответствующие детали.

Это было полезно?

Решение

DataSet.GetXml() Возвращает а string. Анкет В .NET строки внутренне закодированы с использованием UTF-16, но это не совсем актуально здесь.

Причина, по которой нет <?xml encoding=...> Объявление в строке связано с тем, что это объявление полезно или необходимо для анализа XML в байтовый поток. Анкет Строка .NET-это не поток байта, это просто текст с четко определенной семантикой CodePoint (которая является Unicode), поэтому он там не нужен.

Если нет декларации кодирования XML, должен быть принят UTF-8 Парицером XML В отсутствие бом. В вашем случае, однако, это также совершенно не имеет значения, так как проблема не связана с анализатором XML (XML не проанализирован SQL Server, когда он хранится в TEXT столбец). Проблема в том, что ваш XML содержит некоторые символы Unicode, и TEXT это тип SQL не Unicode.

Вы можете кодировать string к любому кодированию с использованием Encoding.GetBytes() метод

Другие советы

Я считаю, что ваш подход должен заключаться в использовании writexml вместо getxml. Это должно позволить вам указать кодирование.

Тем не менее, обратите внимание, что вам придется написать через промежуточный поток - если вы выводите непосредственно на строку, он всегда будет использовать UTF -16. Поскольку вы используете текстовый столбец, это позволит символам не действителю для текста.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top