У меня есть приложение, которое получает XML из некоторой веб-службы, написанной на PHP, и вставляет ее в базу данных SQL Server. Когда я пытаюсь вставить принятый XML, который содержит польские диакритические символы, я получаю сообщение об ошибке, как это:Преобразование UTF8 в uTF16 в SQL Server
XML синтаксический анализ: строка 2, символ 703, нелегальный XML характер
Я пытался сделать что-то вроде это:
DECLARE @xml XML;
SET @xml = '(here I paste some sample XML that contains diacritical characters)';
SELECT @xml = CAST(@xmlstr AS XML);
INSERT INTO vos_DirectXML_ut(ValidXML,synchronization_time,synchronization_type,MethodName)
VALUES(@xml,GETDATE(),@SynchroType,@method);
ValidXML
столбец XML
типа.
Я гугле найти какое-то решение, и я нашел UTF8String: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx
Я установил его, и пытался преобразовать XML в UTF8String, а затем преобразовать его снова в нормальный varchar
, а затем XML
, и вставить его в моя таблица, но похоже, что она не меняет никаких символов внутри этого XML, она просто меняет тип переменной и не решает мою проблему.
Я также нашел совет какого-то парня, что можно решить подобную проблему, написав процедуру, которая проходит цикл для каждого символа в переменной (XML в моем случае) и вручную меняет ее кодировку, но этот парень также сказал, что может работа медленная. Это действительно единственный способ решить мою проблему?
Это помогло, хотя я должен был добавить строку: SET @xmlstr = ЗАМЕНИТЬ (@ xmlstr, 'кодирование = "UTF-8"', '') ; , потому что, не удаляя объявление кодировки из заголовка XML, он сказал: Анализ XML: строка 1, символ 38, не удалось переключить кодировку Благодарим за помощь – Konrad
Просьба предоставить образец кода XML. – Devart
@ Konrad Лучше заменить 'UTF-8' на' UTF-16': 'REPLACE (@xmlstr, 'encoding =" UTF-8 "', 'encoding =" UTF-16 "')', так как это * is * utf-16 закодирован (это то, что означает ведущий символ N). –